如何在python中反转字典并从重复的键值中创建一个列表
Posted
技术标签:
【中文标题】如何在python中反转字典并从重复的键值中创建一个列表【英文标题】:How to reverse a dictionary in python and create a list out of the duplicate keys value 【发布时间】:2022-01-16 09:03:35 【问题描述】:我今天给自己一个任务,只是想在 Python 中弄清楚下面的练习:
# given the dictionary below
dic =
"jane": "doe",
"remy": "ma",
"haaland": "buuk",
"adam": "doe",
new_dict =
for x, y in dic.items():
if y not in new_dict.keys():
new_dict[y] = x
else:
new_dict[y] = [x]
print("results: ", new_dict)
# results: 'doe': ['adam'], 'ma': 'remy', 'buuk': 'haaland'
我怎样才能达到以下结果?
results: 'doe': ['jane', 'adam'], 'ma': 'remy', 'buuk': 'haaland'
【问题讨论】:
【参考方案1】:最直接的解决方案是:
from collections import defaultdict
res = defaultdict(list)
for key, val in sorted(dic.items()):
res[val].append(key)
香草字典也可以做到这一点:
res =
for i, v in d_input.items():
res[v] = [i] if v not in res.keys() else res[v] + [i]
使用pandas
的简洁解决方案:
import pandas as pd
pd.Series(dic).reset_index().groupby(0).agg(list).to_dict()['index']
【讨论】:
【参考方案2】:def reverse_dict(d):
inv =
for k, v in d.items():
if v in inv:
inv[v].append(k)
else:
inv[v] = [k]
return inv
dic =
"jane": "doe",
"remy": "ma",
"haaland": "buuk",
"adam": "doe",
print(reverse_dict(dic))
【讨论】:
【参考方案3】:您也可以使用dict.setfault
方法来反转键值顺序。然后再次遍历字典以从单例列表中取出项目以完全匹配您想要的结果:
out =
for k,v in dic.items():
out.setdefault(v,[]).append(k)
out = k: v if len(v)>1 else v[0] for k,v in out.items()
输出:
'doe': ['jane', 'adam'], 'ma': 'remy', 'buuk': 'haaland'
【讨论】:
以上是关于如何在python中反转字典并从重复的键值中创建一个列表的主要内容,如果未能解决你的问题,请参考以下文章