Skip to main content
 首页 » 编程设计

python之当值是列表且项目不唯一时,交换字典键和值

2025年05月04日14kuangbin

设置

我有一个大字典,在列表中包含唯一键、唯一值和非唯一值。

字典看起来像,

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']}