字典(映射)
一,创建字典
- 使用{键:值}创建字典
In [122]: grade = {'a':85,'b':96,'c':78}
In [123]: grade
Out[123]: {'a': 85, 'b': 96, 'c': 78}
- 使用字典()强制转换
In [124]: grade = dict([('a',83),('b',95)])
In [125]: grade
Out[125]: {'a': 83, 'b': 95}
二,字典基本操作
- 返回字典包含键值对数
In [125]: grade
Out[125]: {'a': 83, 'b': 95}
In [126]: len(grade)
Out[126]: 2
- 返回与键关联的值
In [125]: grade
Out[125]: {'a': 83, 'b': 95}
In [127]: grade['b']
Out[127]: 95
- 将值关联到键上
In [125]: grade
Out[125]: {'a': 83, 'b': 95}
In [128]: grade['b']=56
In [129]: grade
Out[129]: {'a': 83, 'b': 56}
- 删除指定的键
In [129]: grade
Out[129]: {'a': 83, 'b': 56}
In [130]: del grade['b']
In [131]: grade
Out[131]: {'a': 83}
- 检查键是否在字典中
In [132]: grade = {'a':85,'b':96,'c':78}
In [135]: 'd' in grade
Out[135]: False
In [136]: 'c' in grade
Out[136]: True
三,使用DIR(字典)查看字典方法
In [137]: dir(dict)
Out[137]:
[
'clear',
'copy',
'fromkeys',
'get',
'items',
'keys',
'pop',
'popitem',
'setdefault',
'update',
'values']
四,字典方法
- 明确清空字典
In [138]: grade = {'a':85,'b':96,'c':78}
In [139]: grade.clear()
In [140]: grade
Out[140]: {}
- 复制浅复制
#赋值操作将变量名grade1关联到grade,没有产生副本,改变字典内容,都发生改变
In [156]: grade
Out[156]: {'a': 5, 'b': 96, 'c': 78, 'd': 82, 'e': 86}
In [157]: grade1 = grade
In [158]: grade['a'] = 85
In [159]: grade1
Out[159]: {'a': 85, 'b': 96, 'c': 78, 'd': 82, 'e': 86}
#copy操作,产生一个新字典,对应的键,当替换副本中的值时,原字典不受影响。
#当修改字典中的值,如列表中值,原字典受影响。此为浅拷贝。
#产生这种问题是因为,字典中的值是可变对象,改变其内容并不能改变键与列表的关联关系。
In [167]: grade = {'a':85,'b':93,'c':[56,78,90]}
In [168]: grade
Out[168]: {'a': 85, 'b': 93, 'c': [56, 78, 90]}
In [169]: grade2 = grade.copy()
In [170]: grade2['a'] = 5
In [171]: grade2['c'][1] = 100
In [172]: grade
Out[172]: {'a': 85, 'b': 93, 'c': [56, 100, 90]}
In [173]: grade2
Out[173]: {'a': 5, 'b': 93, 'c': [56, 100, 90]}
为避免这种问题,可以使用深拷贝,及拷贝值及其所包含的所有值。
In [177]: from copy import deepcopy
In [178]: grade = {'a':85,'b':93,'c':[56,78,90]}
In [180]: grade3 = deepcopy(grade)
In [181]: grade3['c'][1] = 100
In [182]: grade
Out[182]: {'a': 85, 'b': 93, 'c': [56, 78, 90]}
In [183]: grade3
Out[183]: {'a': 85, 'b': 93, 'c': [56, 100, 90]}
- fromkeys返回一个新字典,第一个参数是一个键序列,第二个参数是一个值
In [2]: dict.fromkeys(['a','b','c'],80)
Out[2]: {'a': 80, 'b': 80, 'c': 80}
- 获得返回查找键的值,当指定键不存在时返回无
In [5]: dic = dict.fromkeys(['a','b','c'],90)
In [6]: dic
Out[6]: {'a': 90, 'b': 90, 'c': 90}
In [7]: dic.get('a')
Out[7]: 90
In [8]: dic.get('d')
- 项目返回一个包含所有字典键值对的列表
In [6]: dic
Out[6In [11]: dic.items()
Out[11]: dict_items([('a', 90), ('b', 90), ('c', 90)])
- 键返回包含字典中所有键的列表
In [6]: dic
Out[6]: {'a': 90, 'b': 90, 'c': 90}
In [12]: dic.keys()
Out[12]: dict_keys(['a', 'b', 'c'])
- 弹出返回字典中键的值,并删除这个键值对
In [13]: dic.pop('c')
Out[13]: 90
In [14]: dic
Out[14]: {'a': 90, 'b': 90}
- 值返回字典中值的列表
In [15]: dic = dict.fromkeys(['a','b','c'],90)
In [16]: dic.values()
Out[16]: dict_values([90, 90, 90])
- 更新使用一个字典更新另一个字典,如果有相同的键将替换原字典的值,如果没有则加入原字典。
In [17]: dic.update({'d':86,'e':75})
In [18]: dic
Out[18]: {'a': 90, 'b': 90, 'c': 90, 'd': 86, 'e': 75}