Python 字典
Python 字典
字典的介绍
- 字典不仅可以保存值,还能对值进行描述
- 使用大括号来表示一个字典,不仅有值
value
,还有值的描述key
- 字典里的数据都是以键值对
key-value
的形式来保留的 key
和value
之间用冒号:
来连接- 多个键值对之间用逗号
,
来分割
person = {'name': 'zhangsan', 'age': 18, 'weight': 150, 'height': 180}
print(person) # {'name': 'zhangsan', 'age': 18, 'weight': 150, 'height': 180}
字典的注意事项
- 字典里的
key
不允许重复,如果key
重复了,后一个key
对应的值会覆盖前一个 - 字典里的
value
可以是任意数据类型,但是key
只能使用不可变数据类型,一般使用字符串
person = {
'name': 'zhangsan',
'age': 18,
'height': 180,
'age': 20, # 会替换上一个 age 的值
'isPass': True, # 值可以是 bool
'hobbies': ['唱', '跳'], # 也可以是 lsit
4: 'good', # key 只能是不可变数据类型
('yes', 'hello'): 100,
# ['ok', 'no']: 'hi' # key 只能是不可变数据类型
}
print(person)
字典元素的更改和添加
- 直接使用
key
可以修改对应的value
- 如果
key
在字典里存在,是修改key
对应的value
- 直接输入新的
key-value
键值对,字典里就会添加一个新的key-value
键值对
person = {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
print(person) # {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
person['name'] = 'list'
print(person['name']) # list
print(person) # {'name': 'list', 'age': 18, 'addr': '北京'}
person['gender'] = 'female'
print(person) # {'name': 'list', 'age': 18, 'addr': '北京', 'gender': 'female'}
字典元素的删除
pop
使用方法 pop
可以删除字典内的指定键值对,执行结果是被删除的 value
person = {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
print(person) # {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
x = person.pop('name')
print(x) # zhangsan 执行结果是被删除的 value
print(person) # {'age': 18, 'addr': '北京'}
popitem
使用方法 popitem
也可以删除字典内指定的键值对,执行结果是被删除这个元素组成的键值对,默认删除最后一个
person = {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
print(person) # {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
y = person.popitem()
print(y) # ('addr', '北京')
print(person) # {'name': 'zhangsan', 'age': 18}
del
使用 del
语句也可以删除字典内指定的键值对
person = {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
print(person) # {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
del person['age']
print(person) # {'name': 'zhangsan', 'addr': '北京'}
clear
使用方法 clear
可以清空一个字典
person = {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
print(person) # {'name': 'zhangsan', 'age': 18, 'addr': '北京'}
person.clear()
print(person) # {}
字典元素的查询
下标
- 字典的数据在保存时,是无序的,你能通过下标来获取
person = {'name': 'zhangsan', 'age': 18, 'x': 'y'}
print(person) # {'name': 'zhangsan', 'age': 18, 'x': 'y'}
print(person['name']) # zhangsan 使用 key 获取对应的 value
# print(person['height']) # KeyError: 'height' 如果要查找的 key 不存在,会报错
get
使用方法 get
,如果指定的 key
不存在,会返回 None
,不会报错
person = {'name': 'zhangsan', 'age': 18, 'x': 'y'}
print(person) # {'name': 'zhangsan', 'age': 18, 'x': 'y'}
print(person.get('height')) # None
# 如果根据 key 获取不到 value 的值,使用给定的默认值
print(person.get('gender', 'female')) # female
print(person.get('name', 'list')) # zhangsan
# 使用 get 方法不会将原字典添加任何东西
print(person) # {'name': 'zhangsan', 'age': 18, 'x': 'y'}
字典的合并
字典之间不支持加法运算
# print(persons1 + persons2)
# TypeError: unsupported operand type(s) for +: 'dict' and 'dict'
使用方法 update
进行字典的合并 a.update(b)
persons1 = {'name': 'zhangsan', 'age': 18}
print(persons1) # {'name': 'zhangsan', 'age': 18}
persons2 = {'addr': '北京', 'height': 180}
print(persons2) # {'addr': '北京', 'height': 180}
persons1.update(persons2)
print(persons1) # {'name': 'zhangsan', 'age': 18, 'addr': '北京', 'height': 180}
字典的遍历
- 字典的特殊在列表和元组是一个单一的数据,但是字典是键值对的形式
方法一
- 直接用
for...in
循环遍历字典
person = {'name': 'zhangsan', 'age': 18, 'height': '180cm'}
for x in person:
print(x, ':', person[x], end=' ') # name : zhangsan age : 18 height : 180cm
方法二
- 使用方法
keys
获取到所有的key
,然后再遍历key
,根据key
获取value
person = {'name': 'zhangsan', 'age': 18, 'height': '180cm'}
print(person.keys()) # dict_keys(['name', 'age', 'height'])
for k in person.keys():
print(k, ':', person[k], end=' ') # name : zhangsan age : 18 height : 180cm
方法三
- 使用方法
values
获取所有的value
,但是只能拿到value
,不能拿到key
person = {'name': 'zhangsan', 'age': 18, 'height': '180cm'}
print(person.values()) # dict_values(['zhangsan', 18, '180cm'])
for v in person.values():
print(v, end=' ') # zhangsan 18 180cm
方法四
- 使用方法
items
person = {'name': 'zhangsan', 'age': 18, 'height': '180cm'}
print(person.items()) # dict_items([('name', 'zhangsan'), ('age', 18), ('height', '180cm')])
for item in person.items():
print(item[0], ':', item[1], end=' ') # name : zhangsan age : 18 height : 180cm
print()
for k, v in person.items():
print(k, ':', v, end=' ') # name : zhangsan age : 18 height : 180cm
字典的推导式
# 有一个字典 dict = {'a': 100, 'b':200, 'c': 300},使用代码,
# 将字典点 key 和 value 互换,变成{100: 'a', 200:'b', 300:'c'}
dict = {'a': 100, 'b': 200, 'c': 300}
new_dict = {}
for k, v in dict.items():
new_dict[v] = k
print(new_dict) # {100: 'a', 200: 'b', 300: 'c'}
new_dict = {v: k for k, v in dict.items()} # 使用字典推导式
print(new_dict) # {100: 'a', 200: 'b', 300: 'c'}