1 定义
字典是一种映射对象类型,由键值对构成的一个可变容器。字典中的每个键值对内用冒号 ( : ) 分隔,键值对间用逗号 ( , ) 分隔,所有键值对包括在{}中。字典的键必须是唯一的,只有可散列的数据类型才能用作这些映射里的键,而值则不必是唯一的。可散列数据类型:一个对象是可散列的,那么在它的生命周期中它的hash值是不变的。Python所有内置的不可变的对象都是可散列的(hashable),如数字、字符串等;可变的容器(比如list或dict)不是hashable;对于元组,只有它包含的所有元素都是可散列类型的情况下,它才是可散列的。
# 判断对象是不是可散列数据类型
t = (1, 2, 3)
hash(t) # 有hash值
t = (1, 2, [1, 2])
hash(t) # TypeError: unhashable type: 'list'
创建字典的方法:根据定义创建:使用一对中括号 {},键值对中间用冒号,每项间使用逗号分隔。
d = {} # 空字典
d = {'a':1, 'b':2, 'c':3}使用dict()构造函数
# 键值对
d1 = dict({'name':'Tom', 'age':'18', 'gender':'male'})
# 关键字参数
d2 = dict('name'='Tom', 'age'='18', 'gender'='male')
# 元素为元组或列表的元组、元素为元组或列表的列表
d3 = dict([(name', 'Tom'), ('age', '18'), ('gender', 'male')])
# zip(seq1, seq2)
seq1 = ['name', 'age', 'gender']
seq2 = ['Tom', '18', 'male']
d4 = dict(zip(seq1, seq2))fromkeys() 方法
"""用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。语法:dict.fromkeys(seq, value)参数:seq为字典键值列表,value为键序列对应的值,默认为None。返回值:返回一个新的字典。"""
seq = ['a', 'b', 'c']
value = [1, 2]
d1 = dict.fromkeys(seq, value)
d2 = {}.fromkeys(seq, value)
d3 = {'A':1, 'B':2}.fromkeys(seq, value)
print(d1) # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2]}
print(d2) # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2]}
print(d3) # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2]}字典推导构建新字典
字典推导可以从任何以键值对作为元素的可迭代对象中构建出字典。
# 利用元组列表生成字典
lt = [('a', 1), ('b', 2), ('c', 3)]
d = {key: value for key, value in lt} # {'a': 1, 'b': 2, 'c': 3}
# 利用一个字典生成另一个字典
d1 = {key.upper(): value for key, value in d.items()} # {'A': 1, 'B': 2, 'C': 3}
2 基本操作
2.1 访问字典根据字典的键来访问字典,如果不存在,则会抛出异常。
d = {'name':'Tom', 'age':'18', 'gender':'male'}
d['name'] # Tom
d['nationality'] # 报异常 KeyError: 'nationality'使用get()函数访问字典,如果键不存在,返回默认值,而不会报错。
"""语法:dict.get(key, default=None)参数:key为要查找的键,default为键不存在时返回的默认值。返回:返回指定键的值,若不存在,则返回默认值default,default默认为None。"""
d = {'name':'Tom', 'age':'18', 'gender':'male'}
d.get('nationality', 'Chinese') # Chinese
2.2 修改字典
2.2.1 更新字典元素
# 更新指定键对应的值
d = {'name':'Tom', 'age':'18', 'gender':'male'}
d['name'] = 'Henry'
print(d)
Out:
{'name': 'Henry', 'age': '18', 'gender': 'male'}
2.2.2 添加字典元素
d = {'name':'Tom', 'age':'18', 'gender':'male'}
d['nationality'] = 'Chinese' # 添加元素
print(d)
Out:
{'name': 'Tom', 'age': '18', 'gender': 'male', 'nationality': 'Chinese'}
2.2.3 setdefault()添加元素
与get()方法类似,如果key在字典中,返回对应的值,不修改已存在的键对应值。如果key不在字典中,则插入key及设置的默认值default,并返回 default,default默认值为None。
"""语法:dict.setdefault(key, default=None)参数:key为要添加的键&#