【问题标题】:Dictionary comprehension matching values?字典理解匹配值?
【发布时间】:2021-05-16 23:04:00
【问题描述】:

我有这本词典:

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 的情况下解决这个问题?谢谢

【问题讨论】:

    标签: python dictionary list-comprehension dictionary-comprehension


    【解决方案1】:

    你的听写理解几乎是正确的。您需要一个 if 条件来检查密钥是否存在于 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)
    

    输出

    {'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')]]}
    

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2021-07-11
      • 2021-10-25
      • 2016-10-23
      • 2022-11-17
      • 2020-08-27
      相关资源
      最近更新 更多