介绍
字典是由key-value键值对组成的可变的、无序的、key不重复的数据集
键的类型:可以是整数和任何不可变的类型,也可以是非整数。如浮点数、字符串或元组。
字典的定义和初始化
dict()
In [12]: d1=dict() In [13]: d={} In [14]: print(type(d)) <class 'dict'>
In [22]: d={'a':1,'b':2,'c':None,'d':[1,2]} In [23]: d Out[23]: {'a': 1, 'b': 2, 'c': None, 'd': [1, 2]}
dict(**kwargs)
In [16]: dict(a=1) Out[16]: {'a': 1} In [17]: dict(a=1,b=['abc']) Out[17]: {'a': 1, 'b': ['abc']}
dict(iterable,**kwargs) 可迭代对象必须是二元结构
In [6]: d=(("name",'tom'),('age',18)) In [7]: dict(enumerate(range(5))) Out[7]: {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} In [8]: d=dict((('a',1),)) In [9]: d Out[9]: {'a': 1} In [10]: item=(("name",'tom'),('age',18)) In [11]: d=dict(item) In [12]: d Out[12]: {'age': 18, 'name': 'tom'}
字典的方法
类方法----dict.fromkeys(iterable,value)
In [7]: dict.fromkeys(range(3)) Out[7]: {0: None, 1: None, 2: None} In [8]: dict.fromkeys(range(3),('a',)) Out[8]: {0: ('a',), 1: ('a',), 2: ('a',)} In [9]: dict.fromkeys(range(3),['a','b']) Out[9]: {0: ['a', 'b'], 1: ['a', 'b'], 2: ['a', 'b']} In [10]: dict.fromkeys((1,),['a','b']) Out[10]: {1: ['a', 'b']} In [12]: {}.fromkeys('name','tom') Out[12]: {'a': 'tom', 'e': 'tom', 'm': 'tom', 'n': 'tom'} In [13]: {}.fromkeys(['name'],'tom') Out[13]: {'name': 'tom'} In [14]: {}.fromkeys([1],'tom') Out[14]: {1: 'tom'}
get(key[,default]) 返回key对应的value,如果key不存在,则返回缺省值default;没有设置default,则返回None
In [13]: d Out[13]: {'age': 18, 'name': 'tom'} In [14]: d.get('name') Out[14]: 'tom' In [16]: d.get('sex','male') Out[16]: 'male'
setdefault(key[, default]) 返回key对应的value,如果key不存在,则添加value为default的kv对,并返回default;如果没有设置default,则缺省值为None
In [17]: d Out[17]: {'age': 18, 'name': 'tom'} In [18]: d.setdefault('sex','male') Out[18]: 'male' In [19]: d Out[19]: {'age': 18, 'name': 'tom', 'sex': 'male'} In [20]: d.setdefault('class') In [21]: d Out[21]: {'age': 18, 'class': None, 'name': 'tom', 'sex': 'male'}
update([other]) 使用other字典对本字典做更新,key不存在就添加,key存在就覆盖已有的key对应的值,就地修改,返回值None
In [1]: d={'age': 18, 'name': 'tom', 'sex': 'male'} In [2]: d1={4:400} In [4]: d.update(d1,color='red') In [5]: d Out[5]: {4: 400, 'age': 18, 'color': 'red', 'name': 'tom', 'sex': 'male'}
clear() 清空字典,就地修改,返回值None
In [79]: d.clear() In [80]: d Out[80]: {}
pop(key[,default]) 从字典中删除key,key存在就返回value,否则返回default。如果为设定default,返回keyerror
In [32]: d=dict.fromkeys(range(10),[1,2,3]) In [33]: d Out[33]: {0: [1, 2, 3], 1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3], 4: [1, 2, 3], 5: [1, 2, 3], 6: [1, 2, 3], 7: [1, 2, 3], 8: [1, 2, 3], 9: [1, 2, 3]} In [35]: d.pop(1) Out[35]: [1, 2, 3] In [36]: d Out[36]: {0: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3], 4: [1, 2, 3], 5: [1, 2, 3], 6: [1, 2, 3], 7: [1, 2, 3], 8: [1, 2, 3], 9: [1, 2, 3]}
pop方法返回值是引用类型的时候,对其作出修改要注意
In [38]: lst=d.pop(9) In [39]: lst Out[39]: [1, 2, 3] In [40]: lst.append(4) In [41]: d Out[41]: {0: [1, 2, 3, 4], 2: [1, 2, 3, 4], 3: [1, 2, 3, 4], 4: [1, 2, 3, 4], 5: [1, 2, 3, 4], 6: [1, 2, 3, 4], 7: [1, 2, 3, 4], 8: [1, 2, 3, 4]}
popitem()移除一个键值对,返回item
In [49]: d1 Out[49]: {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9} In [50]: d1.popitem() Out[50]: (0, 0) In [51]: d1.popitem() Out[51]: (1, 1) In [52]: d1.popitem() Out[52]: (2, 2) In [53]: d1.popitem() Out[53]: (3, 3) In [54]: d1.popitem() Out[54]: (4, 4)
keys()返回字典中key的视图,一定是不重复的值
In [63]: d Out[63]: {'age': 18, 'name': 'tom', 'sex': 'male'} In [64]: d.keys() Out[64]: dict_keys(['sex', 'age', 'name'])
values()返回字典中values的视图,可能有重复值
In [67]: d Out[67]: {'age': 18, 'name': 'tom', 'sex': 'male'} In [68]: d.values() Out[68]: dict_values(['male', 18, 'tom'])
items()返回字典项的列表,每个元素都是一个(key,value)的元组
In [73]: d Out[73]: {'age': 18, 'name': 'tom', 'sex': 'male'} In [74]: d.items() Out[74]: dict_items([('sex', 'male'), ('age', 18), ('name', 'tom')])
字典的遍历
遍历key
In [59]: d={'age': 18, 'name': 'tom', 'sex': 'male'} In [60]: for k in d: ...: print(k) ...: sex age name In [62]: for k in d.keys(): ...: print(k) ...: sex age name
遍历value
In [70]: for k in d: ...: print(d.get(k)) ...: male 18 tom In [71]: for k in d.keys(): ...: print(d.get(k)) ...: male 18 tom
遍历items
In [76]: for k,v in d.items(): ...: print(k,v) ...: sex male age 18 name tom In [77]: for k,_ in d.items(): ...: print(k) ...: sex age name In [78]: for _,v in d.items(): ...: print(v) ...: ...: male 18 tom
映射字典(很有用)
In [81]: d={'age': 18, 'name': 'tom', 'sex': 'male'} In [82]: "Tom's sex is {sex}".format_map(d) Out[82]: "Tom's sex is male"