字典是一种key-value的数据类型。
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
创建:
1 dict1={1:2,'a':'A','b':{1:2,2:3}} 2 3 dict1 4 Out[51]: {1: 2, 'a': 'A', 'b': {1: 2, 2: 3}}
字典的方法介绍:

1.dict.clear() 清空字典内的键值对
1 help(dict.clear) 2 Help on method_descriptor: 3 4 clear(...) 5 D.clear() -> None. Remove all items from D. 6 7 dict1.clear() 8 9 dict1 10 Out[53]: {}
2.dict.copy() 浅拷贝
1 dict1={1:2,'a':'A','b':{1:2,2:3}} 2 3 help(dict.copy) 4 Help on method_descriptor: 5 6 copy(...) 7 D.copy() -> a shallow copy of D #浅拷贝 8 9 10 dict2=dict1.copy() 11 12 dict2 13 Out[58]: {1: 2, 'a': 'A', 'b': {1: 2, 2: 3}}
浅拷贝效果代码演示:
1 dict1['b'][1]=2333 2 3 dict1 4 Out[60]: {1: 2, 'a': 'A', 'b': {1: 2333, 2: 3}} 5 6 dict2 7 Out[61]: {1: 2, 'a': 'A', 'b': {1: 2333, 2: 3}} 8 #浅拷贝同列表方法效果一样
3.dict.fromkeys() 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
1 help(dict.fromkeys) 2 Help on built-in function fromkeys: 3 4 fromkeys(iterable, value=None, /) method of builtins.type instance 5 Returns a new dict with keys from iterable and values equal to value. #创建一个新字典,以迭代变量中元素做字典的键,value为字典所有键对应的初始值。 6 7 dict_new=dict.fromkeys(['name','age','sex']) #无默认值得新字典 8 dict_new 9 Out[65]: {'age': None, 'name': None, 'sex': None} 10 11 #设置value值为默认值 12 dict_new2=dict.fromkeys(['name','age','sex'],['zoe','18','female']) 13 dict_new2 14 Out[67]: 15 {'age': ['zoe', '18', 'female'], 16 'name': ['zoe', '18', 'female'], 17 'sex': ['zoe', '18', 'female']} #不会一一对应。 18 19 #设置value值为默认值 20 dict_new3=dict.fromkeys(['name','age','sex'],0) 21 dict_new3 22 Out[69]: {'age': 0, 'name': 0, 'sex': 0}
原理同浅拷贝,dict.fromkeys()在创建新字典的时候,后面指定的value值,列表等可迭代参数存储在一个内存位,故而只会对应到所有的key值,而不是一一对应到所有的key值。
4.dict.get() 指定键的值,如果值不在字典中返回默认值None。—— 获取字典值的正确姿势
1 help(dict.get) 2 Help on method_descriptor: 3 4 get(...) 5 D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. 6 #指定键的值,如果值不在字典中返回默认值None。 7 8 dict1 9 Out[71]: {1: 2, 'a': 'A', 'b': {1: 2333, 2: 3}} 10 11 dict1.get(1) 12 Out[72]: 2 13 dict1.get('b') 14 Out[73]: {1: 2333, 2: 3}
dict.get('key') 返回value,在运行中如果没有找到“键”不会报错,默认返回None。可以指定返回的默认值。
dict['key'],通过取键的方式,如果字典中没有该“键”会报错,注意生产代码中不要使用它。
5.dict.items() 返回可遍历的(键, 值) 元组数组,数组组成新列表
1 help(dict.items) 2 Help on method_descriptor: 3 4 items(...) 5 D.items() -> a set-like object providing a view on D's items。 6 7 dict1 8 Out[75]: {1: 2, 'a': 'A', 'b': {1: 2333, 2: 3}} 9 10 dict1.items() 11 Out[76]: dict_items([(1, 2), ('a', 'A'), ('b', {1: 2333, 2: 3})])
返回是(键,值)的元组组成的列表,在循环中使用这种方法,会降低运行效率,不建议使用。
6.dict.keys() 返回一个字典所有的键
1 help(dict.keys) 2 Help on method_descriptor: 3 4 keys(...) 5 D.keys() -> a set-like object providing a view on D's keys 6 7 dict1 8 Out[78]: {1: 2, 'a': 'A', 'b': {1: 2333, 2: 3}} 9 10 dict1.keys() 11 Out[79]: dict_keys([1, 'a', 'b'])
7.dict.values() 返回一个字典所有的值
1 dict1.keys() 2 Out[79]: dict_keys([1, 'a', 'b']) 3 4 help(dict.values) 5 Help on method_descriptor: 6 7 values(...) 8 D.values() -> an object providing a view on D's values 9 10 dict1.values() 11 Out[82]: dict_values([2, 'A', {1: 2333, 2: 3}])
8.dict.pop() 标准删除方法,删除指定键,返回指定键上的值;指定最少需要一个参数(删除的键)
1 help(dict.pop) 2 Help on method_descriptor: 3 4 pop(...) 5 D.pop(k[,d]) -> v, remove specified key and return the corresponding value. 6 If key is not found, d is returned if given, otherwise KeyError is raised。 7 #移除特定的key值返回相应的值;如果没有找到该键,返回报错 8 9 dict1.pop(1) #移除特定的key值返回相应的值, 10 Out[86]: 2 11 12 dict1.pop(1) #如果没有找到该键,返回报错 13 Traceback (most recent call last): 14 15 File "<ipython-input-87-66784dbc8199>", line 1, in <module> 16 dict1.pop(1) 17 18 KeyError: 1
9.dict.popitem() 0参数,返回一个键值对(key,value)形式(返回的是随机删除的键值对)
1 help(dict.popitem) 2 Help on method_descriptor: 3 4 popitem(...) 5 D.popitem() -> (k, v), remove and return some (key, value) pair as a 2-tuple; but raise KeyError if D is empty. 6 #移除并返回删除的键值对的元组;如果字典为空则会报错。 7 8 dict1 9 Out[90]: {'a': 'A', 'b': {1: 2333, 2: 3}} 10 11 dict1.popitem() #0参数,随机删除,返回删除的键值对。 12 Out[91]: ('b', {1: 2333, 2: 3}) 13 14 dict1 15 Out[92]: {'a': 'A'} 16 17 dict1.popitem('a') #不需要指定参数,输入参数会报错 18 Traceback (most recent call last): 19 20 File "<ipython-input-93-7f6358d38f28>", line 1, in <module> 21 dict1.popitem('a') 22 23 TypeError: popitem() takes no arguments (1 given) 24 25 26 dict1.popitem() #随机删除 27 Out[94]: ('a', 'A') 28 29 dict1 30 Out[95]: {} 31 32 dict1.popitem() #空字典会报错 33 Traceback (most recent call last): 34 35 File "<ipython-input-96-f2ec12fcbb94>", line 1, in <module> 36 dict1.popitem() 37 38 KeyError: 'popitem(): dictionary is empty'
10.dict.setdefault() 如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。
1 help(dict.setdefault) 2 Help on method_descriptor: 3 4 setdefault(...) 5 D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D 6 #等价于dict.get(k,d),如果k不在dict中,设置dict[k]=d。 7 8 dict1 9 Out[98]: {} 10 11 dict1.setdefault('name') 12 13 dict1 14 Out[100]: {'name': None} 15 16 dict1.setdefault('age',18) 17 Out[101]: 18 18 19 dict1 20 Out[102]: {'age': 18, 'name': None}
11.dict.update() 把字典dict2的键/值对更新到dict里;如果dict2和dict中键都存在,更新;如果不存在键,则在dict中添加键值对
1 help(dict.update) 2 Help on method_descriptor: 3 4 update(...) 5 D.update([E, ]**F) -> None. Update D from dict/iterable E and F. 6 If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] #将字典/迭代变量E中key进行迭代,设置D[k]=E[k],#更新对应的存在的键的值。 7 If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v #E缺失key值,则把k,v迭代,设置D[k]=v.——添加键值对。 8 In either case, this is followed by: for k in F: D[k] = F[k] 9 10 info={'stu1102':'a', 11 'stu003':'b', 12 'stu004':'c'} 13 14 b={1:2,3:4,'stu1102':'aaaaa'} 15 16 info.update(b) 17 18 info 19 Out[115]: {'stu1102': 'aaaaa', 'stu003': 'b', 'stu004': 'c', 1: 2, 3: 4}
增加键值对:
方法1:
1 info['1']=123456789 2 3 info 4 Out[118]: {'stu1102': 'aaaaa', 'stu003': 'b', 'stu004': 'c', 1: 2, 3: 4, '1': 123456789}
方法2:dict.update()
1 info.update({111:222,222:666}) 2 3 info 4 5 Out[126]: 6 {'stu1102': 'aaaaa', 7 'stu003': 'b', 8 'stu004': 'c', 9 1: 2, 10 3: 4, 11 '1': 123456789, 12 'new': 'setdefault value', 13 111: 222, 14 222: 666}
方法3:dict.setdefault()
1 info.setdefault('new','setdefault value') 2 Out[119]: 'setdefault value' 3 4 info 5 Out[120]: 6 {'stu1102': 'aaaaa', 7 'stu003': 'b', 8 'stu004': 'c', 9 1: 2, 10 3: 4, 11 '1': 123456789, 12 'new': 'setdefault value'}
修改:
方法1:
1 info['1']=None 2 3 info 4 Out[128]: 5 {'stu1102': 'aaaaa', 6 'stu003': 'b', 7 'stu004': 'c', 8 1: 2, 9 3: 4, 10 '1': None, 11 'new': 'setdefault value', 12 111: 222, 13 222: 666}
方法2:dict.update()
1 info.update({1:'update'}) 2 3 info 4 Out[131]: 5 {'stu1102': 'aaaaa', 6 'stu003': 'b', 7 'stu004': 'c', 8 1: 'update', 9 3: 4, 10 '1': None, 11 'new': 'setdefault value', 12 111: 222, 13 222: 666}
删除:
方法1:del
1 dict2 2 Out[138]: {1: 2, 'a': 'A', 'b': {1: 2333, 2: 3}} 3 4 del dict2 #删除整个字典对象 5 6 dict2 7 Traceback (most recent call last): 8 9 File "<ipython-input-140-476dc5b54aa4>", line 1, in <module> 10 dict2 11 12 NameError: name 'dict2' is not defined
1 dict 2 Out[144]: {1: 2, 2: 3} 3 4 del dict[1] #删除指定的键值对 5 6 dict 7 Out[146]: {2: 3}
方法2:dict.pop() 标准删除方式
1 dict 2 Out[146]: {2: 3} 3 4 info 5 Out[147]: 6 {'stu1102': 'aaaaa', 7 'stu003': 'b', 8 'stu004': 'c', 9 1: 'update', 10 3: 4, 11 '1': None, 12 'new': 'setdefault value', 13 111: 222, 14 222: 666} 15 16 info.pop(1) 17 Out[148]: 'update'
方法3:dict.popitem() 随机删除,不可指定参数
1 info.popitem() 2 Out[150]: (222, 666) 3 4 info 5 Out[151]: 6 {'stu1102': 'aaaaa', 7 'stu003': 'b', 8 'stu004': 'c', 9 3: 4, 10 '1': None, 11 'new': 'setdefault value', 12 111: 222}
方法4:dict.clear() 清除字典键值对
1 dict 2 Out[152]: {2: 3} 3 4 dict.clear() 5 6 dict 7 Out[154]: {}
查看,查找:
方法1:
1 info 2 Out[155]: 3 {'stu1102': 'aaaaa', 4 'stu003': 'b', 5 'stu004': 'c', 6 3: 4, 7 '1': None, 8 'new': 'setdefault value', 9 111: 222} 10 11 info[3] 12 Out[156]: 4
方法2:dict.get()
1 info.get('stu1102') 2 Out[158]: 'aaaaa'
方法3:dict.items()
1 info.items() 2 Out[159]: dict_items([('stu1102', 'aaaaa'), ('stu003', 'b'), ('stu004', 'c'), (3, 4), ('1', None), ('new', 'setdefault value'), (111, 222)])
方法4:dict.keys()
1 info.keys() 2 Out[160]: dict_keys(['stu1102', 'stu003', 'stu004', 3, '1', 'new', 111])
方法5:dict.values()
1 info.values() 2 Out[161]: dict_values(['aaaaa', 'b', 'c', 4, None, 'setdefault value', 222])
方法6:k in dict 返回bool,标准用法
1 'stu003' in info #在python2.x中,有一个dict.has_key(k)的方法,已经弃用。 2 Out[162]: True 3 4 '0' in info 5 Out[163]: False
方法7:循环
方法一:最佳使用方式
1 for key in info: 2 print(key,info[key]) 3 4 stu1102 aaaaa 5 stu003 b 6 stu004 c 7 3 4 8 1 None 9 new setdefault value 10 111 222
方法二: #会先把dict转成list,数据里大时莫用
1 for k,v in info.items(): 2 print(k,v) 3 4 stu1102 aaaaa 5 stu003 b 6 stu004 c 7 3 4 8 1 None 9 new setdefault value 10 111 222
浙公网安备 33010602011771号