0

我有两个从配置文件创建的字典:

    dict1 = {'x':'A', 'y':'B', 'z':'C'} # decoding ABCs
    dict2 = {'ID1': ('x','n1'), 'ID2': ('y','n2'), 'ID3':('z', 'n3') } 

我想按以下格式创建一个新字典:

    final = {'A':{'ID1':'n1', 'ID2':'n2'}, 'C':{'ID3':'n3'}, ...}

我没有想出一个聪明的方法来做到这一点。有没有人有任何想法?

4

2 回答 2

2

假设 dict2 中的 x、y、z 和 final 中的 A、B、C:

final = {dict1[k]: {id: v} for id, (k, v) in dict2.items()}

In [6]: dict1 = {'x':'A', 'y':'B', 'z':'C'}

In [7]: dict2 = {'ID1': ('x','n1'), 'ID2': ('y','n2'), 'ID3':('z', 'n3') }

In [8]: {dict1[k]: {id: v} for id, (k, v) in dict2.items()}
Out[8]: {'A': {'ID1': 'n1'}, 'B': {'ID2': 'n2'}, 'C': {'ID3': 'n3'}}

如果你真的是说应该有两个 As,那么它就不能表示为一个 dict。配对列表可以吗?然后你必须决定订购。

In [10]: [(dict1[k], {id: v}) for id, (k, v) in dict2.items()]
Out[10]: [('A', {'ID2': 'n2'}), ('C', {'ID3': 'n3'}), ('A', {'ID1': 'n1'})]
于 2013-04-03T08:50:35.323 回答
2

考虑:

final = {}
for id, (x, n) in dict2.items():
    final.setdefault(dict1[x], {})[id] = n

这创造了

{'A': {'ID2': 'n2', 'ID1': 'n1'}, 'C': {'ID3': 'n3'}} 

不知道这是否满足您的需求,但至少它是一个有效的结构。

于 2013-04-03T09:02:14.957 回答