python字典
字典存储一系列的键值对:key:value
- Python中用
{}
表示字典,可以使用{}创建一个字典 - 字典中的key和value之间用冒号
:
分割,元素之间用逗号,
分割。 - 字典的key只能为数字、字符串、元组,大多数情况使用字符串作为key
- value的类型没有限制
# 创建空字典
a = {}
print("type(a) = ", type(a)) # type(a) = <class 'dict'>
print("a = ", a) # a = {}
# 创建字典
a = {'a':123, 'b':456, 0:789}
print("a = ", a) # a = {'a': 123, 'b': 456, 0: 789}
利用dict创建字典
a = dict(key1=value1,key2=value2,key3=value3)
- 此时key只能是字符串
# 创建了一个空字典
a = dict()
print("type(a) = ", type(a)) # type(a) = <class 'dict'>
print("a = ", a) # a = {}
# 利用dict创建字典,此时key只能是字符串,不能是数字
a = dict(a=123, b=456, c=789)
print("a = ", a) # a = {'a': 123, 'b': 456, 'c': 789}
a = dict([[key1, value1],[key2, value2],[key3, value3]])
- 可以传入一个列表或者元组,每个元素也是一个包含两个元素的列表或者元组
- 则此时可以按照第一个元素作为key,第二个元素作为value
a = dict([['a', 123], ['b', 456], ['c', 789]])
print("type(a) = ", type(a)) # type(a) = <class 'dict'>
print("a = ", a) # a = {'a': 123, 'b': 456, 'c': 789}
a = dict([('a', 123), ('b', 456), ('c', 789)])
print("type(a) = ", type(a)) # type(a) = <class 'dict'>
print("a = ", a) # a = {'a': 123, 'b': 456, 'c': 789}
zip(sequence1, sequence2, ...)
- 把多个序列相同下标的元素组装成元组,结果是一个可迭代对象
- 结果可以转换成list,但是首次转换后迭代器就为空
keys = ['a', 'b', 'c']
value = [123, 456, 789]
zipped = zip(keys, value)
print(zipped) # <zip object at 0x7f2b354a9f40>
print(list(zipped)) # [('a', 123), ('b', 456), ('c', 789)]
print(list(zipped)) # []
keys = ['a', 'b', 'c']
value1 = [123, 456, 789]
value2 = [321, 654, 987, 1000]
zipped = list(zip(keys, value1, value2))
print(zipped) # [('a', 123, 321), ('b', 456, 654), ('c', 789, 987)]
keys = ['a', 'b', 'c']
value = [123, 456, 789]
a = dict(list(zip(keys, value)))
print("a = ", a) # a = {'a': 123, 'b': 456, 'c': 789}
访问字典
Python的字典通过key来获取value,把key看做下标即可
a[x]:a为dict、x为中的一个key,必须存在否则会报错
keys = ['a', 'b', 'c']
value = [123, 456, 789]
a = dict(list(zip(keys, value)))
print("a = ", a) # a = {'a': 123, 'b': 456, 'c': 789}
print(a['a'], a['b']) # 123 456
如果并不知道x是否在字典的key中,需要查询字典中x对应的value,可以使用get方法
a.get(x, value=None)
:a表示字典,x表示查询的key,value表示默认值- 如果x在字典的key中,则上述的结果为a[x],如果不存在,上述结果为value
keys = ['a', 'b', 'c']
value = [123, 456, 789]
a = dict(list(zip(keys, value)))
print("a = ", a) # a = {'a': 123, 'b': 456, 'c': 789}
print(a.get('a', 'XXX')) # 123
print(a.get('d', 'XXX')) # XXX
print(a.get('e')) # None
添加和修改元素
字典通过直接利用key可以访问对应的value,类似的,添加元素、修改元素也是直接利用key和value就能进行添加或者更新
a = {}
a['语文'] = 80
print("a = ", a) # a = {'语文': 80}
a['数学'] = 99
print("a = ", a) # a = {'语文': 80, '数学': 99}
a['英语'] = 90
print("a = ", a) # a = {'语文': 80, '数学': 99, '英语': 90}
#修改元素
a['语文'] = 85
print("a = ", a) # a = {'语文': 85, '数学': 99, '英语': 90}
删除元素
删除字典中的键值对,可以用Python本身的删除语法del
s = {'a':123, 'b':456, 'c':789}
del s['a']
print("s = ", s) # s = {'b': 456, 'c': 789}
del s['b']
print("s = ", s) # s = {'c': 789}
del s['c']
print("s = ", s) # {}
删除字典中的键值对,也可以用字典的删除方法pop
s = {'a':123, 'b':456, 'c':789}
s.pop('a')
print("s = ", s) # s = {'b': 456, 'c': 789}
s.pop('b')
print("s = ", s) # s = {'c': 789}
s.pop('c')
print("s = ", s) # {}
遍历字典
与List一样,直接利用for语句就可以遍历字典
for x in a
:其中x是循环变量,a是字典,此时遍历的是a的key列表
a = dict([['a', 123], ['b', 456], ['c', 789]])
for x in a:
print(x)
# a
# b
# c
利用a.keys()
、a.values()
、a.items()
可以分别循环遍历key、value、二元组(key,value)
s = {'a':123, 'b':456, 'c':789}
for x in s.keys():
print(x)
# a
# b
# c
for y in s.values():
print(y)
# 123
# 456
# 789
for x, y in s.items():
print(x, y)
# a 123
# b 456
# c 789
判断是否存在元素
- 字典中可以使用
in
、not in
判断某元素是否在字典中。 x in a
、x in a.keys()
:判断是否在a的key中x in a.values()
:判断x是否在a的value中(x, y) in a.items()
:判断x是否在a的key中,并且对应的value为y
s = {'a': 123, 'b': 456, 'c': 789}
print('a' in s) # True
print('d' in s.keys()) # False
print(123 in s.values()) # True
print(135 in s.values()) # False
print(('a', 123) in s.items()) # True
print(('b', 123) in s.items()) # False
拷贝字典
- 与List类似,直接赋值无法进行赋值,需要使用copy函数完成复制
- 直接赋值相当于是“引用”,就是添加一个别名
s = {'a': 123, 'b': 456, 'c': 789}
t = s
# 修改s,t也一起修改:t就是s
s['d'] = 1000
print("s =", s) # s = {'a': 123, 'b': 456, 'c': 789, 'd': 1000}
print("t =", t) # t = {'a': 123, 'b': 456, 'c': 789, 'd': 1000}
s = {'a': 123, 'b': 456, 'c': 789}
t = s.copy()
# 修改s,t不会修改:t就是s的副本
s['d'] = 1000
print("s =", s) # s = {'a': 123, 'b': 456, 'c': 789, 'd': 1000}
print("t =", t) # t = {'a': 123, 'b': 456, 'c': 789}
合并两个字典
- 字典利用update方法可以将另一个字典的key-value对更新到已有字典中
- a.update(b):把字典b中的每一个元素放入a中更新:
- 如果b中的key在a中没有,则直接在a中添加一组新的key-value对
- 如果b中的key在a中有,则直接更新对应的value
s = {'a':123, 'b':456, 'c':789}
t = {'a':321, 'd':1000}
s.update(t)
print("s = ", s) # s = {'a': 321, 'b': 456, 'c': 789, 'd': 1000}
print("t = ", t) # t = {'a': 321, 'd': 1000}