Python中的反向字典

时间:2009-09-11 10:02:33

标签: python data-structures dictionary

我正在尝试使用现有字典的值列表创建一个新的字典作为单独的键。

例如:

dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]})

我想获得:

dict2 = dict({1:['a','b','c'], 2:['a','b','c'], 3:['a','b'], 4:['b']})

到目前为止,我还没能以非常干净的方式做到这一点。有什么建议吗?

3 个答案:

答案 0 :(得分:8)

如果您使用的是Python 2.5或更高版本,请使用defaultdict class from the collections模块; defaultdict会在第一次访问缺失密钥时自动创建值,因此您可以使用此处创建dict2的列表,如下所示:

from collections import defaultdict
dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]})
dict2 = defaultdict(list)
for key, values in dict1.items():
    for value in values:
        # The list for dict2[value] is created automatically
        dict2[value].append(key)

请注意,dict2中的列表不会按任何特定顺序排列,因为词典不会对其键值对进行排序。

如果你想在最后输出一个普通的字典会导致KeyError丢失密钥,只需在上面使用dict2 = dict(dict2)

答案 1 :(得分:4)

请注意,您的示例中不需要dict{}语法为您提供了一个词典:

dict1 = {'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]}

答案 2 :(得分:-3)

其他方式:

dict2={}
[[ (dict2.setdefault(i,[]) or 1) and (dict2[i].append(x)) for i in y ] for (x,y) in dict1.items()]