字典 = {'键1':'值1','键2':'值2','键3':'值3',...}

animal_dict = {'Cow':'Milk','Chicken':'egg'}

字典由键值对构成,这种键值对称为项。在字典(及其他映射类型中),键是唯一的,而值无需如此

——字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下

一、函数dict

  1. >>> lst = [[1,2],[3,4]]
  2. >>> dct = dict(lst)
  3. >>> dct
  4. {1: 2, 3: 4}

二、format_map

'字符串{键名}'.format_map(键名所在字典)

作用:字典中包含各种信息,只需在格式字符串中提取所需的信息即可

  1. >>> '张三来自于{省份}{城市}'.format_map(dict_v['张三'])
  2. '张三来自于浙江杭州'
  3. >>> dict_v = {'张三':{'省份':'浙江','城市':'杭州'},'李四':{'省份':'浙江','城市':'嘉兴'},'王五':{'省份':'浙江','城市':'杭州'},'李六':{'省份':'江苏','城市':'南京'}}
  4. >>> '张三来自于{省份}{城市}'.format_map(dict_v['张三'])
  5. '张三来自于浙江杭州'
  6. >>> '李四来自于{省份}{城市}'.format_map(dict_v['李四'])
  7. '李四来自于浙江嘉兴'

三、字典方法

1、clear

字典.clear()

作用:删除所有字典项

  1. >>> x = {}
  2. >>> y = x #y和x指向同一字典
  3. >>> x['key'] = 'value'
  4. >>> y
  5. {'key': 'value'}
  6. >>> x
  7. {'key': 'value'}
  8. >>> x = {} #x指向另一个字典
  9. >>> x
  10. {} #x是新字典的值
  11. >>> y
  12. {'key': 'value'} #所以y还是原来字典的值
  1. >>> x = {}
  2. >>> y = x #y和x指向同一字典
  3. >>> x['key'] = 'value'
  4. >>> y
  5. {'key': 'value'}
  6. >>> x.clear() #y和x共同指向的字典清空
  7. >>> y
  8. {}

2、copy/deepcopy,浅复制/深复制

字典.copy()

from copy import deepcopy     deepcopy(字典)

要理解浅复制和深复制的区别,首先要了解python存储数据的方式。变量 = 值1,是把变量指向了值1(内存地址1),假使重新给变量赋值为值2(内存地址2) ,那么变量和值1的映射关系没有了,替换为变量指向值2。

  1. >>> from copy import deepcopy
  2. >>> dict_orign = {'key':{'1':'1','2':'2'}}
  3. >>> copy1 = dict_orign.copy()
  4. >>> copy2 = deepcopy(dict_orign)
  5. >>> id(dict_orign)
  6. 2442900992712 #原件在内存中的地址
  7. >>> id(copy1)
  8. 2442900738280 #浅复制副本1在内存中的地址
  9. >>> id(copy2)
  10. 2442900992392 #深复制副本2在内存中的地址
  11. >>> id(dict_orign['key'])
  12. 2442900975032 #原件字典项中值在内存中的地址
  13. >>> id(copy1['key'])
  14. 2442900975032 #浅复制副本1字典项中值在内存中的地址
  15. >>> id(copy2['key'])
  16. 2442900992552 #深复制副本2字典项中值在内存中的地址

↑↑↑见上述,原件和浅复制副本字典项-值在内存中的地址是一样的,而深复制完全不同,所以深复制后续的操作与原件不相关

  1. >>> M = {'1':['1','2','3']}
  2. >>> m1 = M.copy()
  3. >>> id(M['1'])
  4. 2442869287688
  5. >>> id(m1['1'])
  6. 2442869287688 #浅复制时,副本和原件值指向的内存地址都是2442869287688
  7. >>> m1['1'].remove('3') #在既有内存地址上修改
  8. >>> M
  9. {'1': ['1', '2']} #原件也跟着副本的修改而变动了
  10. >>> id(M['1'])
  11. 2442869287688
  12. >>> id(m1['1'])
  13. 2442869287688 #值指向的内存地址还是原先的2442869287688
  14. >>> m1['1'] = ['1','1','1'] #副本值重新赋值,也就是指向了新的内存地址
  15. >>> M
  16. {'1': ['1', '2']} #因为副本和原件值指向的内存地址不同,所以副本的变更不影响原件
  17. >>> id(M['1'])
  18. 2442869287688
  19. >>> id(m1['1'])
  20. 2442900925064 #副本内存地址已变更

3、fromkeys

{}.fromkeys([键名列表],值),值为选填项,不填则每个键对应的值都是None,填则每个键对应的值都是设置值

dict.fromkeys([键名列表],值),值为选填项,不填则每个键对应的值都是None,填则每个键对应的值都是设置值

作用:创建一个新字典,其中包含指定的键,且每个键对应的值都是None

  1. >>> {}.fromkeys(['name', 'age'])
  2. {'age': None, 'name': None}
  3. >>> dict.fromkeys(['name', 'age'])
  4. {'age': None, 'name': None}
  5. >>> dict.fromkeys(['name', 'age'], '(unknown)')
  6. {'age': '(unknown)', 'name': '(unknown)'}

4、get

字典.get(键,值),值为选填项,不填则若无此项返回None,填则若无此项返回设定值

作用:访问字典中的项,如果存在,则与普通字典查找一致;如果不存在则返回None,也可将None替换为其他值。

  1. >>> d = {}
  2. >>> print(d['name'])
  3. Traceback (most recent call last):
  4. File "<stdin>", line 1, in ?
  5. KeyError: 'name'
  6. >>> print(d.get('name'))
  7. None
  8. >>> d.get('name', 'N/A')
  9. 'N/A'

5、items

字典.items()

作用:(1)返回一个包含所有字典项的列表,其中每个元素都为(key,value)形式

     (2)字典项在列表中无序排序

    (3)items非副本,如果字典发生变化,items也会响应改变

  1. >>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
  2. >>> d.items()
  3. dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')])

返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代(迭代将在第5章详细介绍)。
另外,你还可确定其长度以及对其执行成员资格检查。

  1. >>> it = d.items()
  2. >>> len(it)
  3. 3
  4. >>> ('spam', 0) in it
  5. True

视图的一个优点是不复制,它们始终是底层字典的反映,即便你修改了底层字典亦如此。

  1. >>> d['spam'] = 1
  2. >>> ('spam', 0) in it
  3. False
  4. >>> d['spam'] = 0
  5. >>> ('spam', 0) in it
  6. True

6、keys

方法keys返回一个字典视图,其中包含指定字典中的键。

7、pop方法

字典.pop(键名)

作用:pop可用于获取与指定键相关联的值,并将该键值对从字典中删除。

  1. >>> d = {'x': 1, 'y': 2}
  2. >>> d.pop('x')
  3. 1
  4. >>> d
  5. {'y': 2}

8、popitem

字典.popitem()

作用:随机弹出键值对,可用于逐个处理字典项场景,这样无需提供键名

  1. >>> d = {'url': 'http://www.python.org', 'spam': 0, 'title': 'Python Web Site'}
  2. >>> d.popitem()
  3. ('url', 'http://www.python.org')
  4. >>> d
  5. {'spam': 0, 'title': 'Python Web Site'}

9、setdefault

字典.setdefault(键,值),值为选填项,不填则若无此项值为None,字典新增此键值对;填则若无此项值为设定值,字典新增此键值对

作用:类似于get,但键不存在时,会在字典中添加指定键值对

  1. >>> d = {}
  2. >>> d.setdefault('name', 'N/A')
  3. 'N/A'
  4. >>> d
  5. {'name': 'N/A'}
  6. >>> d['name'] = 'Gumby'
  7. >>> d.setdefault('name', 'N/A')
  8. 'Gumby'
  9. >>> d
  10. {'name': 'Gumby'}
  11. >>> d = {}
  12. >>> print(d.setdefault('name'))
  13. None
  14. >>> d
  15. {'name': None}

10、update

字典1.update(字典2)

作用:使用字典2中的项来更新字典1,若存在相同项,则用字典2的值替换字典1的值

  1. >>> d = {
  2. ... 'title': 'Python Web Site',
  3. ... 'url': 'http://www.python.org',
  4. ... 'changed': 'Mar 14 22:09:15 MET 2016'
  5. ... }
  6. >>> x = {'title': 'Python Language Website'}
  7. >>> d.update(x)
  8. >>> d
  9. {'url': 'http://www.python.org', 'changed':
  10. 'Mar 14 22:09:15 MET 2016', 'title': 'Python Language Website'}

11、values

字典.values()

作用:返回值组成的字典视图,keys因为键特性,不会重复,values返回的可能包含重复值

  1. >>> d = {}
  2. >>> d[1] = 1
  3. >>> d[2] = 2
  4. >>> d[3] = 3
  5. >>> d[4] = 1
  6. >>> d.values()
  7. dict_values([1, 2, 3, 1])

 

Python基础教程:字典的更多相关文章

  1. 《python基础教程(第二版)》学习笔记 字典(第4章)

    <python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...

  2. Python基础教程2上的一处打印缺陷导致的代码不完整#1

    #1对代码的完善的 出现打印代码处缺陷截图: 图片上可以看到,定义的request根本没有定义它就有了.这个是未定义的,会报错的,这本书印刷问题,这个就是个坑,我也是才发现.花了点时间脱坑. 现在发完 ...

  3. python基础教程(第二版)

    开始学习python,根据Python基础教程,把里面相关的基础章节写成对应的.py文件 下面是github上的链接 python基础第1章基础 python基础第2章序列和元组 python基础第3 ...

  4. 【Python】Python基础教程系列目录

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...

  5. Python基础教程系列目录,最全的Python入门系列教程!

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. 在现在的工作及开发当中,Python的使用越来越广泛,为了方便大家的学习,Linux大学 特推出了 <Python基 ...

  6. 《python基础教程(第二版)》学习笔记 语句/循环/条件(第5章)

    <python基础教程(第二版)>学习笔记 语句/循环/条件(第5章) print 'AB', 123 ==> AB 123 # 插入了一个空格print 'AB', 'CD' == ...

  7. Python基础教程总结(一)

    引言: 一直都听说Python很强大,以前只是浏览了一些博客,发现有点像数学建模时使用的Matlab,就没有深入去了解了.如今Python使用的地方越来越多,最近又在学习机器学习方面的知识,因此想系统 ...

  8. 学习参考《Python基础教程(第3版)》中文PDF+英文PDF+源代码

    python基础教程ed3: 基础知识 列表和元组 字符串 字典 流程控制 抽象(参数 作用域 递归) 异常 魔术方法/特性/迭代器 模块/标准库 文件 GUI DB 网络编程 测试 扩展python ...

  9. Python基础教程(第2版 修订版) pdf

    Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...

  10. Python基础教程-02

    <Python基础教程> 第3章 使用字符串 字符串方法find返回的并非布尔值.如果find像这样返回0,就意味着它在索引0处找到 了指定的子串 join可合并一个字符串列表,不能合并数 ...

随机推荐

  1. Oracle UNDOTBS表空间的查看与扩容

    1.查看UNDO表空间使用情况 select tablespace_name,       round(sum(decode(status, 'ACTIVE', bytes, 'UNEXPIRED', ...

  2. pytorch学习笔记(8)--现有模型的使用和修改

    官网网址: https://pytorch.org/vision/0.9/models.html#semantic-segmentation (1).ImageNet train_data = tor ...

  3. memoのQt自动调整窗口尺寸

    折腾了好久,好久.终于搞出一个自认为还算可以的方案: QTimer::singleShot(0, this, [this]{ this->adjustSize(); }); 这个解决方案确实有点 ...

  4. labwindows/cvi activex 控件无法正常使用问题解决

    在进行labwindows/cvi编程时,想使用时间控件,需要在界面上点击右键的activex选项中选择Microsoft Data and Time picker control6.0(SP4).如 ...

  5. Kubernetes--创建Ingress资源

    创建Ingress资源 Ingress资源是基于HTTP虚拟主机或URL的转发规则,它在资源配置清单的spec字段中嵌套了rules.backend和tls等字段进行定义.下面的示例中定义了一个Ing ...

  6. WSL2与ensp的40故障

    在使用ensp做radius认证的时候看到了Linux平台的freeradius认证服务器,于是使用了Windows平台的sub system: WSL2,按照网上的教程安装,并且安装了docker ...

  7. jmeter支持发送https请求

    示例网址: https://passport.damai.cn/login 一.Jmeter如何导入SSL证书 步骤1.打开Chrome浏览器访问地址,点击安全锁,导出证书,并复制文件至指定文件目录. ...

  8. python基础篇 26-redis操作

    redis的基本操作: redis_conf ={ 'host':'192.168.64.128', 'password':'Aa123456', 'db':'0', 'port':6379, 'de ...

  9. 证书profile 申请

    ios  云打包   证书 和密码  在之前的笔记当中已申请好 证书profile 文件申请 登录苹果开放平台 申请前要添加身份,设备,设备那需要填写udid 方法链接https://www.jian ...

  10. 在 Linux 上使用《算法》第4版官网中的 algs4.jar 包

    使用<算法>第4版( Algorithms Fourth Edition ) 中的 algs4.jar 包 下载 algs4.jar 官网网址: https://algs4.cs.prin ...