0

我有两本词典

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作为键CombDict

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

我知道这是非常基本的。我的逻辑代码是写的,但绝对是错误的。

CombDict = {}
for k0, v0 in Dict0:
    CombDict.values()= k0
    for k1,v1  in Dict1:
        CombDict.keys() = v1

有什么建议吗?谢谢。顺便说一句,如果您想让字典对您更有意义,只需编辑它们。

4

1 回答 1

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'}
于 2013-07-19T12:47:00.733 回答