如何结合两个词典?一个字典作为关键,另一个字典作为价值

时间:2013-07-19 12:41:30

标签: python dictionary

我有两本词典

Dict0 = {'a':0, 'b':1, 'c':2}

Dict1 = {0 : {'a0' : 0,'a1' : 1,'a2' : 2},
         1 : {'b0' : 0,'b1' : 1,'b2' : 2},
         2 : {'c0' : 0,'c1' : 1,'c2' : 2}}

我想获得一个合并字典CombDict,它使用Dict0的键作为CombDict的值,并使用Dict1的值作为{的键{1}}

CombDict

我知道这是非常基本的。我的逻辑代码是写的,但肯定是错的。

CombDict = {{'a0':0,'a1':1,'a2':2}:'a',{'b0':0,'b1':1,'b2':2}'b',{'c0':0,'c1':1,'c2':2}:'c'}

有什么建议吗?谢谢。 顺便说一句,如果你想让字典对你更有意义,那就去编辑它们吧。

1 个答案:

答案 0 :(得分:2)

因为字典是可变的,所以不能将字典用作另一个字典的键或将它们存储在一个字典中。

您必须捕获字典的不可变“快照”:

def dict_to_key(d):
    return tuple(sorted(d.items()))

如果字典值也不可变,则可以使用dict_to_key()函数的返回值作为键。

现在您可以构建组合字典:

CombinedDict = {dict_to_key(Dict1[v]): k for k, v in Dict0.items()}

演示:

>>> Dict0 = {'a':0, 'b':1, 'c':2}
>>> Dict1 = {0 : {'a0' : 0,'a1' : 1,'a2' : 2},
...          1 : {'b0' : 0,'b1' : 1,'b2' : 2},
...          2 : {'c0' : 0,'c1' : 1,'c2' : 2}}
>>> def dict_to_key(d):
...     return tuple(sorted(d.items()))
... 
>>> {dict_to_key(Dict1[v]): k for k, v in Dict0.items()}
{(('b0', 0), ('b1', 1), ('b2', 2)): 'b', (('a0', 0), ('a1', 1), ('a2', 2)): 'a', (('c0', 0), ('c1', 1), ('c2', 2)): 'c'}