1、字典总结
2、字典表示
2.1、定义一个字典,2种方式
- 花括号表示:adict = {"key1": "value1", "key2": "value2", "key3": "value3"}
- dict内置函数:adict = dict( {"key1": "value1", "key2": "value2", "key3": "value3"})
2.2、空字典
- {}
2.3、字典的特征
2.3.1、字典的key必须为不可变对象,即数字、字符串、元组;key可以不唯一
- key会去重,如果key不唯一,key的value值,会被后面新的value值覆盖
- key必须是不可变对象,如果是可变对象,会报错TypeError: unhashable type: 'set'
2.3.2、字典是可变对象
字典是可变对象,对字典的操作,将会“原地”修改字典原来的取值。
2.3.3、字典是无序的,python3.7后是有序
虽然python3.7后,字典也可以是有序,但在使用有序字典的时候,使用的是python内置库collections的OrderedDict。
3、字典常用方法
3.1、创建字典fromkeys
- fromkeys(seq[, value]):创建一个字典,seq为字典key的列表,默认value为None,也可为所有key指定value值
# seq可以为字符串、列表、元组、集合、字典,如为字典,seq表示字典的key的序列
seq = {"A": 1, "B": 2, "C": 3}
new_dict = dict.fromkeys(seq)
new_dict1 = dict.fromkeys(seq, "MM")
>> {'A': None, 'B': None, 'C': None}
>> {'A': 'MM', 'B': 'MM', 'C': 'MM'}
3.2、删除字典clear、pop、popitem
- clear():返回None,清空字典
- pop(key):返回key对应的value,如果key不在字典中,会报错KeyError
- popitem():返回字典的最后一对键值对。
直接在原始字典上修改。
origin_dict = {"A": 1, "B": 2, "C": 3}
res = origin_dict.pop("A")
>> 1
res1 = origin_dict.popitem()
>> {"C": 3}
res2 = origin_dict.clear()
>> {}
3.3、复制字典copy
- copy:返回新的字典,为新的字典开辟新的内存空间。
- 深度拷贝deepcopy
copy会重新分配新的内存空间,但是如果对象下有可变对象,并不会为对象下的可变对象分配新的内存空间。可以理解为copy只为父类分配了内存空间,并不会为子类分配内存空间。如果想彻底的将2个对象彻底独立,彻底划分开,需要深度拷贝deepcopy,深度拷贝会为父类和子类都分配内存空间,修改父类或子类不会互相影响。
import copy
origin_dict = {"A": 1, "B": 2, "C": 3, "test": ["a", "b", "c"]}
# 普通copy为浅拷贝,会分配新的内存空间,但是origin["test"]并没有开辟新的内存空间
result = origin_dict.copy()
# deepcopy是深度拷贝,会分配新的内存空间,也会为origin["test"]分配新的内存空间
result01 = copy.deepcopy(origin_dict)
3.4、字典查找get,keys,values
- get(key):获取key对应对value,如果value不在返回None
- keys():返回字典的key
- values:返回字典的values
origin_dict = {"A": 1, "B": 1, "C": 3, "test": ["a", "b", "c"]}
result = origin_dict.keys()
result1 = origin_dict.values()
>> dict_keys(['A', 'B', 'C', 'test']) <class 'dict_keys'>
>> dict_values([1, 1, 3, ['a', 'b', 'c']]) <class 'dict_values'>
3.5、字典更新setdefault,update
- setdefault(key[, default]):返回key对应的value值;如果key不在dict中,将新的键值对插入字典中,value可指定default值。
- update(dict):返回None,更新字典
origin_dict = {"A": 1, "B": 2, "C": 3, "test": ["a", "b", "c"]}
result = origin_dict.setdefault("A", 9)
>> 1
dict2 = {"A": "M", "B": "NN", "F": 1}
origin_dict.update(dict2)
>> origin_dict更新为:{'A': 'M', 'B': 'NN', 'C': 3, 'test': ['a', 'b', 'c'], 'F': 1}
3.5、循环遍历字典items
- items():得到的是每个字典键值对组成的元组
- 遍历key:可通过keys()得到字典全部的键
- 遍历value:可通过values()得到字典全部的值
origin_dict = {"A": 1, "B": 1, "C": 3, "test": ["a", "b", "c"]}
for key, value in origin_dict.items():
print(key, value)
>>
A 1
B 1
C 3
test ['a', 'b', 'c']