字典
内置数据结构之一,与列表一样是可变序列;以键值对的方式存储数据,是一个无序的序列。
字典中的键是唯一的,值是可以重复的。键必须是不可变对象。
a = {'年龄':23,'身高':160,'体重':100}
print(a['年龄']) # 通过键取值
23
创建与删除
使用花括号创建
a = {'年龄':23,'身高':160,'体重':100} # 使用{}创建字典时,键要加引号
a
{'年龄': 23, '身高': 160, '体重': 100}
使用内置函数dict()
dict(年龄=23,身高=160,体重=100,名字='小明') # 使用dict函数创建字典时,键不需要加引号
dict
{'年龄': 23, '身高': 160, '体重': 100, '名字': '小明'}
# fromkeys方法与dict函数搭配使用,允许使用序列来创建字典key
b = dict.fromkeys(['年龄','身高','体重']) # 默认值为None,可在第二个参数传入想要的值
b
{'年龄': None, '身高': None, '体重': None}
查询操作
第一种方法,和列表相似,使用[ ]
,但是字典没有下标,只能通过键名提取,也就是字典名[键]
。
这种⽅法有⼀个弊端:如果字典中不存在 key ,会报 KeyError
错误
a = dict(年龄=23,身高=160,体重=100,名字='小明')
a['年龄']
23
a['成绩']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-12-a62ae14fb333> in <module>
----> 1 a['成绩']
KeyError: '成绩'
第二种方法,使用字典get()
方法取值。如果不存在key,则返回None或自己指定的值
a = dict(年龄=23,身高=160,体重=100,名字='小明')
a.get('年龄')
23
print(a.get('成绩'))
print(a.get('成绩',90)) # 指定值
None
90
# 遍历
a = dict(年龄=23,身高=160,体重=100,名字='小明')
for item in a: # 遍历字典的键
print(item,a[item]) # 获取字典的键,值
年龄 23
身高 160
体重 100
名字 小明
key的判断
# 返回字典中所有键key
a = dict(年龄=23,身高=160,体重=100,名字='小明')
print(a.keys(),type(a.keys()))
print(list(a.keys())) # 转化为列表
# 返回字典中所有值value
print(a.values(),type(a.values()))
# 判断某元素是否存在字典中
print('年龄' in a)
print(60 in a)
dict_keys(['年龄', '身高', '体重', '名字']) <class 'dict_keys'>
['年龄', '身高', '体重', '名字']
dict_values([23, 160, 100, '小明']) <class 'dict_values'>
True
False
# 返回字典中所有键值对items
a = dict(年龄=23,身高=160,体重=100,名字='小明')
print(a.items(),type(a.items()))
for item in a.items():
print(item) # 返回元组
dict_items([('年龄', 23), ('身高', 160), ('体重', 100), ('名字', '小明')]) <class 'dict_items'>
('年龄', 23)
('身高', 160)
('体重', 100)
('名字', '小明')
元素的增、删、改
修改 /新增
# 字典秉承”有则更新,无则添加“的原则
a = dict(年龄=23,身高=160,体重=100,名字='小明')
print(a)
a['年龄']=25
print(a)
a['成绩']=90
print(a)
{'年龄': 23, '身高': 160, '体重': 100, '名字': '小明'}
{'年龄': 25, '身高': 160, '体重': 100, '名字': '小明'}
{'年龄': 25, '身高': 160, '体重': 100, '名字': '小明', '成绩': 90}
# 使用update()方法批量更新字典,在该方法中传入对应的键值
a.update(年龄=28,成绩=90) # 键无需添加引号
a
{'年龄': 28, '身高': 160, '体重': 100, '名字': '小明', '成绩': 90}
删除
# 删除字典里键值对是使用del语句 del 字典名[键]
a = dict(年龄=23,身高=160,体重=100,名字='小明')
print(a)
del a['年龄']
print(a)
{'年龄': 23, '身高': 160, '体重': 100, '名字': '小明'}
{'身高': 160, '体重': 100, '名字': '小明'}
# 使⽤ pop() ⽅法删除,该方法删除字典给定的键及对应的值;pop() 可返回值,返回值为被删除的值
a = dict(年龄=23,身高=160,体重=100,名字='小明')
b = a.pop('年龄')
print(a)
print(b)
{'身高': 160, '体重': 100, '名字': '小明'}
23
# 使⽤ popitem() 删除字典最后⼀个键值对,popitem() 返回的是⼀个元组
a = dict(年龄=23,身高=160,体重=100,名字='小明')
b = a.popitem()
print(a)
print(b)
{'年龄': 23, '身高': 160, '体重': 100}
('名字', '小明')
# 清空字典 clear()
a = dict(年龄=23,身高=160,体重=100,名字='小明')
print(a)
a.clear()
print(a)
{'年龄': 23, '身高': 160, '体重': 100, '名字': '小明'}
{}
字典生成式
将第一个列表中元素作为键,将第二个列表中元素作为值,生成一个字典。
使用内置函数zip()
:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表
items =['name','age','weight']
values = ['ming',23,100]
a={item:value for item,value in zip(items,values)}
c={a:b for a,b in zip(items,values)}
print(a)
print(c)
{'name': 'ming', 'age': 23, 'weight': 100}
{'name': 'ming', 'age': 23, 'weight': 100}