您的位置:首页 > 编程语言 > Python开发

Python3学习7 字典及其常用方法

2019-02-03 20:46 615 查看

字典

形式:{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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: