字典
形式:{key1: value, key2: value, …}
1.访问方式通过键来获取对应的值
2.字典是无序的,不能切片
3.键不能重复,值可以重复
4.键值必须为不可变类型,例如:数字、字符串、元组
5.字典为可变类型
d1 = {[1]: 23, [2]: [34, 89], [3]: 56} # TypeError: unhashable type: 'list'
一、字典的创建与遍历
创建
d1 = {'k1':45,'k2':56}
创建空字典
# 方法1
d1 = {}
# 方法2
d1 = dict()
遍历
d1 = {'k1': 23, 'k2': [34, 89], 'k3': 56}
# 方法1
for key, value in d1.items():
print(key, value)
# 方法2
for key in d1.keys():
print(key, d1[key])
# 方法3
for key in d1: # 最常用
print(key, d1[key])
"""输出:
k1 23
k3 56
k2 [34, 89]
k1 23
k3 56
k2 [34, 89]
k1 23
k3 56
k2 [34, 89]
"""
二、字典的增加
d = dict()
d['k3']=45
d1={'k1':12,'k2':34}
d.update(d1)
print(d) # {'k2': 34, 'k1': 12, 'k3': 45}
三、字典的删除
pop()
d1={'k1':12,'k2':34,'k3':56,'k4':67}
d1.pop('k1') # 指定键值
print(d1) # {'k4': 67, 'k3': 56, 'k2': 34}
popitem() 随机删除
d1={'k1':12,'k2':34,'k3':56,'k4':67}
d1.popitem() # 随机删除
print(d1) # {'k4': 67, 'k1': 12, 'k3': 56}
del
d1={'k1':12,'k2':34,'k3':56,'k4':67}
del d1['k1']
print(d1) # {'k2': 34, 'k3': 56, 'k4': 67}
del d1
print(d1) # NameError: name 'd1' is not defined
clear() 清空
d1={'k1':12,'k2':34,'k3':56,'k4':67}
d1.clear() # 清空
print(d1) # {}
四、字典的查询
get(),items(),keys(),values()
d1={'k1':12,'k2':34,'k3':56,'k4':67}
print(d1.get('k8')) # 根据键值查value值
# None
print(d1.items()) # 以列表形式,返回可遍历的元组----key和value
# dict_items([('k4', 67), ('k1', 12), ('k2', 34), ('k3', 56)])
print(d1.keys())
# dict_keys(['k4', 'k1', 'k2', 'k3'])
print(d1.values())
# dict_values([67, 12, 34, 56])
五、其他方法
1、fromkeys
把一个列表、元组、字典的key赋给另一个字典
元组:
k = ('k1', 'k2', 'k3') # 元组 列表都行
d2 = dict.fromkeys(k)
print(d2)
# {'k3': None, 'k1': None, 'k2': None}
字典:
d1={'k1':12,'k2':34,'k3':56,'k4':67}
v = d1.fromkeys(['k1', 'k2', 'k8'], 'aa')
print(d1)
# {'k3': 56, 'k2': 34, 'k4': 67, 'k1': 12}
print(v)
# {'k8': 'aa', 'k2': 'aa', 'k1': 'aa'}
2、setdefault
如果key存在,就返回value,不存在就创建
d1={'k1':12,'k2':34,'k3':56,'k4':67}
t = d1.setdefault('k2')
print(d1)
print(t)
"""输出
{'k2': 34, 'k4': 67, 'k3': 56, 'k1': 12}
34
"""
d1={'k1':12,'k2':34,'k3':56,'k4':67}
t = d1.setdefault('k8')
t2 = d1.setdefault('k9', 'aa')
print(d1)
print(t)
print(t2)
"""输出:
{'k3': 56, 'k1': 12, 'k4': 67, 'k2': 34, 'k9': 'aa', 'k8': None}
None
aa
"""
3、zip
zip 从参数中的多个迭代器中取出元素组成一个新的迭代器
l1 = ['a', 'b', 'c', 'd']
l2 = [1, 2, 3, 4]
d = dict(zip(l1, l2))
print(d)
"""输出
{'c': 3, 'd': 4, 'b': 2, 'a': 1}
"""
3.1 行列相同,正常对应位置组合
m = [1, 2, 3]
n = ['a', 'b', 'c']
v = list(zip(m, n))
print(v) # [(1, 'a'), (2, 'b'), (3, 'c')]
3.2 行列不同,以最小的行列组合
m = [1, 2]
n = ['a', 'b', 'c']
v = list(zip(m, n))
print(v) # [(1, 'a'), (2, 'b')]
3.3 逆过程 * zip
m = [1, 2, 3]
n = ['a', 'b', 'c']
v = list(zip(m, n)) # zip 打包
print(v) # [(1, 'a'), (2, 'b'), (3, 'c')]
v2 = list(zip(*v)) # * zip 拆包
print(v2) # [(1, 2, 3), ('a', 'b', 'c')]
3.4 小结
zip不能直接输出,要转成列表、字典或其它形式,例如:list(zip(arg1, arg2))
m = [1, 2, 3]
n = ['a', 'b', 'c']
v = zip(m, n)
print(type(v)) # <class 'zip'>
zip可以遍历
a = [1, 2, 3]
b = [4, 5, 6]
for m in zip(a, b):
print(m) # 一个参数出来的是元组
"""输出:
(1, 4)
(2, 5)
(3, 6)
"""
for m, n in zip(a, b):
print(m * n) # 4 10 18