我有两本词典
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'}
有什么建议吗?谢谢。 顺便说一句,如果你想让字典对你更有意义,那就去编辑它们吧。
答案 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'}