一、定义
字典是无序的键值对集合
字典使用大括号{ }包围,每个键值对之间用逗号分隔,每个键与值之间用冒号分隔
字典是动态的,可以随时添加或删除元素
字典中键不允许出现重复元素,值允许出现重复元素
二、创建
- 通过大括号填充键值对创建
- 通过构造方法dict()创建
- 通过字典推导式创建
# 大括号填充键值对
dc1 = {}
print(dc1) # 输出:{}
dc1 = {'name': 'Andy', 'age': 18}
print(dc1) # 输出:{'name': 'Andy', 'age': 18}
# 构造方法dict()创建
dc2 = dict()
print(dc2) # 输出:{}
dc2 = dict(name = 'Andy', age = 18) # 关键字参数赋值
print(dc2) # 输出:{'name': 'Andy', 'age': 18}
dc2 = dict((('name', 'Andy'), ('age', 18)))
print(dc2) # 输出:{'name': 'Andy', 'age': 18}
# 字典推导式创建
dc3 = {k: v for k, v in {('name', 'Andy'), ('age', 18)}}
print(dc3) # 输出:{'name': 'Andy', 'age': 18}
三、字典使用
1、操作元素
写法:dict[key] = value
键不存在时添加元素,键已经存在时修改元素
dc = {'name': 'Andy', 'age': 18}
dc['age'] = 20
print(dc) # 输出:{'name': 'Andy', 'age': 20}
dc['gender'] = 'male'
print(dc) # 输出:{'name': 'Andy', 'age': 20, 'gender': 'male'}
2、嵌套字典
字典的值可以是字典格式
dc = {'name': 'Andy', 'age': 18, 'course': {'python': 90, 'java': 80}}
print(dc['course']['python']) # 输出:90
dc['course']['java'] = 100
print(dc) # 输出:{'name': 'Andy', 'age': 18, 'course': {'python': 90, 'java': 100}}
四、字典方法
1、keys()
返回由字典键组成的一个新视图对象
写法:dict.keys()
入参:无
返回:字典键组成的一个新视图对象
dc = {'name': 'Andy', 'age': 18}
print(dc.keys()) # 输出:dict_keys(['name', 'age'])
# 遍历查看所有的键
for i in dc.keys():
print(i) # 输出:name
# 输出:age
# 将试图对象转化为列表
print(list(dc.keys())) # 输出:['name', 'age']
2、values()
返回由字典值组成的一个新视图对象
写法:dict.values()
入参:无
返回:字典值组成的一个新视图对象
dc = {'name': 'Andy', 'age': 18}
print(dc.values()) # 输出:dict_values(['Andy', 18])
# 遍历查看所有的键
for i in dc.values():
print(i) # 输出:'Andy'
# 输出:18
# 将试图对象转化为列表
print(list(dc.values())) # 输出:['Andy', 18]
3、items()
返回由字典项(键值对)组成的一个新视图对象
写法:dict.items()
入参:无
返回:字典项(键值对)组成的一个新视图对象
dc = {'name': 'Andy', 'age': 18}
print(dc.items()) # 输出:dict_items([('name', 'Andy'), ('age', 18)])
# 遍历查看所有的键
for i in dc.items():
print(i) # 输出:('name', 'Andy')
# 输出:('age', 18)
# 将试图对象转化为列表
print(list(dc.items())) # 输出:[('name', 'Andy'), ('age', 18)]
4、get()
获取指定key对应的value值
写法:dict.get(key)
入参:字典的键key
返回:如果key存在于字典中,返回key对应的value值。如果key不存在于字典中,返回None
目标元素不存在也不会引发KeyError
dc = {'name': 'Andy', 'age': 18}
print(dc.get('name')) # 输出:Andy
print(dc.get('course')) # 输出:None
5、update()
使用来自dict的键值对更新字典,覆盖原有的键和值
写法:dict.update(dict)
入参:字典对象dict
返回:None
dc = {'name': 'Andy', 'age': 18}
print(dc.update({'age': 20})) # 输出:None
print(dc) # 输出:{'name': 'Andy', 'age': 20}
dc.update({'course':['python', 'java']})
print(dc) # 输出:{'name': 'Andy', 'age': 20, 'course': ['python', 'java']}
6、pop()
删除指定key的键值对,并返回对应value值
写法:dict.pop(key)
入参:key
返回:如果key存在于字典中,返回key对应的value值
如果key不存在于字典中,则引发KeyError错误
dc = {'name': 'Andy', 'age': 18}
print(dc.pop('age')) # 输出:18
print(dc) # 输出:{'name': 'Andy'}
dc.pop('course') # 输出:KeyError: 'course'
五、字典推导式
可以从任何以键值对作为元素的可迭代对象中构建出字典
data = [('a', 1), ('b', 2), ('c', 3)]
# for循环创建字典
dc1 = {}
for k, v in data:
if v > 1:
dc1[k] = v ** 2
print(dc1) # 输出:{'b': 4, 'c': 9}
# 字典推导式创建字典
dc2 = {k:v**2 for k, v in data if v > 1}
print(dc2) # 输出:{'b': 4, 'c': 9}
# 无else时,if在for循环之后
data = {'a': 1, 'b': 2, 'c': 3}
# for循环创建字典
dc1 = {}
for k, v in data.items():
if v > 2:
dc1[k] = v ** 2
else:
dc1.update({k:v})
print(dc1) # 输出:{'a': 1, 'b': 2, 'c': 9}
# 字典推导式创建字典
dc2 = {k:v**2 if v > 2 else v for k, v in data.items()}
print(dc2) # 输出:{'a': 1, 'b': 2, 'c': 9}
# 有else时,if…else在for循环之前