首页 > 解决方案 > 字典理解匹配值?

问题描述

我有这本字典:

Dict1= {'0': [('L', 'Any'), ('D', 'Any')],
 '1': [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]}

和这个:

Dict2= {'0': ['0', '1', '2'],
 '1': ['0', '1', '2'],
 '2': ['0', '1', '2'],
 '3': ['0', '1', '2']}

我想将 dict 1 的键与 dict 2 的值相匹配,并得到这个预期的输出:

NewDict = {'0': [[('L', 'Any'), ('D', 'Any')],
  [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]],
 '1': [[('L', 'Any'), ('D', 'Any')],
  [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]],
 '2': [[('L', 'Any'), ('D', 'Any')],
  [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]],
 '3': [[('L', 'Any'), ('D', 'Any')],
  [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]]}

我试过这段代码:

NewDict= {k: [Dict1[e] for e in v] for k, v in Dict2.items()}

但我得到了错误:KeyError: '2'我知道它来自 dict2 中的值 2 没有任何相应的值,但我必须保持这种形式。有没有办法在不修改 dict2 的情况下解决这个问题?谢谢

标签: pythondictionarylist-comprehensiondictionary-comprehension

解决方案


Your dict comprehension is almost correct. You needed an if condition to check if the key exists in Dict_1.

Dict1= {'0': [('L', 'Any'), ('D', 'Any')],
 '1': [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]}


Dict2= {'0': ['0', '1', '2'],
 '1': ['0', '1', '2'],
 '2': ['0', '1', '2'],
 '3': ['0', '1', '2']}



NewDict = {k:[Dict1[i] for i in v if i in Dict1] for k, v in Dict2.items()}

print(NewDict)

Output

{'0': [[('L', 'Any'), ('D', 'Any')],
       [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]],
 '1': [[('L', 'Any'), ('D', 'Any')],
       [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]],
 '2': [[('L', 'Any'), ('D', 'Any')],
       [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]],
 '3': [[('L', 'Any'), ('D', 'Any')],
       [('D', 'Any'), ('E', 'Any'), ('D', 'Any')]]}

推荐阅读