设置
我有一个大字典,在列表中包含唯一键、唯一值和非唯一值。
字典看起来像,
d = {'a': ['1','2','3'],'b': ['1'],'c': ['1','3']}
问题
我想交换键和值,这样,
d_inverse = {'1': ['a', 'b', 'c'], '2': ['a'],'3': ['a', 'c']}
我找到了以下关于交换键和值的答案,
以及关于交换键与列表中的值,
最后一个答案很接近,但不管理列表中的非唯一值。
也就是说,
{k: oldk for oldk, oldv in d.items() for k in oldv}
产生
{'1': 'c', '2': 'a', '3': 'c'}
我如何解释非唯一值并且不丢失信息?
一种方法是使用 collections.defaultdict
:
d = {'a': ['1','2','3'],'b': ['1'],'c': ['1','3']}
from collections import defaultdict
d_dict = defaultdict(list)
for k,v in d.items():
for i in v:
d_dict[i].append(k)
dict(d_dict)
#{'1': ['a', 'b', 'c'], '2': ['a'], '3': ['a', 'c']}
我是一名优秀的程序员,十分优秀!