python - 将字典值映射到另一个字典的最佳方法是什么

标签 python python-3.x dictionary

我想知道将 2 个字典合并为一个字典的最佳方法是什么,如下所示: dict1 = {k1: v1, k2: v2, ...}dict2 = {v1: w1, v2: w2, ...} result = {k1: w1, k2: w2, ...}

我已经有了一个使用字典理解的解决方案:

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

但我认为这不是最优雅的方式。 你能帮帮我吗?

最佳答案

作为 @jpp's answer 的替代/扩展,您还可以使用 reduce/functools.reduce 来获得更简洁的 chainer 函数:

from functools import reduce
def chainer(first, *others):
    return {k: reduce(lambda x, d: d[x], others, v) for k, v in first.items()}

哪一个更好主要是品味问题;用法和结果是一样的。

对于仅两本词典,您的词典理解是恕我直言,尽可能好和优雅。不过,您可能想使用 get 或添加一个条件,以防键不存在于第二个字典中。

>>> dict1 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
>>> dict2 = {'v1': 'w1', 'v2': 'w2'}
>>> {k: dict2.get(v, 'undefined') for k, v in dict1.items()}
{'k1': 'w1', 'k2': 'w2', 'k3': 'undefined'}
>>> {k: dict2[v] for k, v in dict1.items() if v in dict2}
{'k1': 'w1', 'k2': 'w2'}

chainer 中添加这样的保护措施要复杂一些,特别是对于使用 reduce 的这种变体(并且可能根本没有必要)。

关于python - 将字典值映射到另一个字典的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54477983/

相关文章:

python - 如何使用图像列表中的标签创建 csv 文件

python - 计算 Pandas DataFrame 的百分比变化

python - .dilate()OpenCV的替代方法

python - set() 不删除重复项

python-3.x - PubNub 订阅错误

python - 在python中比较超过最大递归深度?

python - Keras CNN 自动编码器输入形状错误

python - 组合函数和功能模块

javascript - 使用 JavaScript 将动态数字添加到 CSS map Pin

javascript - 从 Map 获取与所使用的原始键相同但不是引用的值