python - 用新字典重新映射字典
问题描述
我想用 Python 中的新字典替换字典键和值。
例如:
dic1 = {'A': 1, 'B': 2, 'C': 3, 'D': 4}
dic2 = {'A': ['B', 'C', 'D','K'], 'C': ['C', 'D', 'A', 'F'], 'D': ['A', 'B', 'C'] }
在 Dic2 中,我有 dic1 中不存在的“K”和“F”值。我也想删除它们。我想要以下形式的输出:
out_dic = {1: [2, 3, 4], 3: [3, 4, 1], 4: [1, 2, 3]}
我找到了一个不够快的解决方案。首先,我用新值替换字典的值。然后用新密钥更新密钥。
解决方案
dic1
用作值的映射,您希望根据该映射替换dic2
. 所以只需迭代所有项目dic2
并使用映射来替换它们:
dic3 = {}
for key, values in dic2.items():
dic3[dic1[key]] = [dic1[value] for value in values]
print(dic3)
如果您的值dic2
可能不存在于 中dic1
,请更改为将它们保留为 中的值dic2
:
dic3[dic1.get(key, key)] = [dic1.get(value, value) for value in values]
如果您想完全删除它们,请使用:
for key, values in dic2.items():
if key in dic1:
dic3[dic1[key]] = [dic1[value] for value in values if value in dic1]
这使:
{1: [2, 3, 4], 3: [3, 4, 1], 4: [1, 2, 3]}
推荐阅读
- hash - 如何在 SAS 的哈希表中使用 %let 宏
- javascript - UnhandledPromiseRejectionWarning:TypeError:使用 Jest + Angular 将循环结构转换为 JSON
- c - 如何将用户输入添加到 void 函数?
- pandas - 使用 NaN 的 Python pandas DataFrame 操作
- excel - 每个循环通过工作簿中的工作表多次的单个 VBA
- c++ - 在 QT 中以编程方式执行鼠标事件
- c# - 找不到命名空间名称“Cinemachine”
- apache-spark - 如何在 spark-submit 之前触发催化剂优化器以减少执行时间?
- reactjs - 未处理的拒绝 (TypeError):this.logger 未定义 - @microsoft/mgt 中的 TeamsProvider.handleAuth()
- c# - 向量 3 的 Gane 错误,但我从未提到向量 3