说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
我们知道,Python 中的字典可以通过键来获得对应值,但如果我们想通过值获取它的键应该怎么做呢?
如果字典的所有值都不相同,可以将字典的键值互换,然后通过键(原来的值)获取。即:
# a 的 y
a = {1:'x', 2:'y'}
a1 = {v:k for k, v in a.items()}
a1
# {'x': 1, 'y': 2}
a1['y']
# 2
这里用了字典推导式完成键值的互换。
如果字典有相同的值(在不同的键中,键不允许有相同值)的话,我们就需要先进行构造,将值转换为列表,将所的有对应键放进去。即:
# b 的 y
b = {1:'x', 2:'y', 3:'y'}
b1 = {v:[] for k,v in b.items()}
b1
# {'x': [], 'y': []}
for k, v in b.items():
b1[v].append(k)
b1
# {'x': [1], 'y': [2, 3]}
b1['y']
# [2, 3]
也可以用以下方法:
b = {1:'x', 2:'y', 3:'y'}
b2 = {}
for k, v in b.items():
# 这样写也是可以的
b2.setdefault(v, []).append(k)
b2['y']
# [2, 3]
还可以用 defaultdict 来优化一下:
from collections import defaultdict
b = {1: 'x', 2: 'y', 3: 'y'}
b3 = defaultdict(list)
b3
# defaultdict(list, {})
for k, v in b.items():
# 如果 d 的 key 没找到,那么将自动使用
# 工厂函数创建一个列表
# 这样减少了一次对字典的遍历
b3[v].append(k)
b3
# defaultdict(list, {'x': [1], 'y': [2, 3]})
b3['y']
# [2, 3]
这样就完成了需求。
(完)
更新时间:2023-09-11 19:21:13 标签:python 字典