Python中的反向字典

Dan*_*Dan 2 python dictionary data-structures

我正在尝试使用现有dict的值列表作为单独的键创建新的dict.

例如:

dict1 = dict({'a':[1,2,3], 'b':[1,2,3,4], 'c':[1,2]})
Run Code Online (Sandbox Code Playgroud)

我想获得:

dict2 = dict({1:['a','b','c'], 2:['a','b','c'], 3:['a','b'], 4:['b']})
Run Code Online (Sandbox Code Playgroud)

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

adu*_*din 8

如果您使用的是Python 2.5或更高版本,请使用模块中的defaultdictcollections ; a 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)
Run Code Online (Sandbox Code Playgroud)

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

如果你想在最后输出一个普通的dict,它会引起一个KeyError缺失键,只需dict2 = dict(dict2)在上面之后使用.

  • 你永远不需要"默认字典".它只是使代码更简单. (2认同)