python - 字典理解匹配值?
问题描述
我有这本字典:
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 的情况下解决这个问题?谢谢
解决方案
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')]]}
推荐阅读
- google-bigquery - 在 BigQuery 中加载可为空的重复字段
- reactjs - 我想当我收到 401 错误代码时,应用程序将注销。但在我的情况下,注销 api 调用但它没有正确注销
- excel - excel宏中的匹配函数只给出第一个结果
- apache-nifi - 如何设计 PutEmail 处理器由所有具有故障流文件的处理器触发?
- excel - Outlook 使用 GetSharedDefaultFolder 自动化错误在 SharedMailbox 中选择子文件夹
- java - mongodb + springboot。如何进行广泛的过滤?
- java - 查询参数值不绑定到 Spring Pageable
- vue.js - 如何将全局对象 App 作为属性导入嵌套组件?
- c# - 交互性和交互性的编译错误
- android - 按下 Flutter 底部导航栏时出现 Android 底部导航