gpt4 book ai didi

Python 合并字典与自定义合并功能

转载 作者:太空狗 更新时间:2023-10-30 02:21:22 25 4
gpt4 key购买 nike

我想合并两个字典 A 和 B,使得结果包含:

  • 来自 A 的所有对,其中 key 对 A 是唯一的
  • 来自 B 的所有对,其中 key 对 B 是唯一的
  • f(valueA, valueB) 其中 A 和 B 中存在相同的键

例如:

def f(x, y):
return x * y

A = {1:1, 2:3}
B = {7:3, 2:2}

C = merge(A, B)

输出:

{1:1, 7:3, 2:6}

感觉应该有一个很好的单行代码来做到这一点。

最佳答案

使用dictionary views为达到这个; dict.viewkeys() result就像一个集合,让你做交集和对称差异:

def merge(A, B, f):
# Start with symmetric difference; keys either in A or B, but not both
merged = {k: A.get(k, B.get(k)) for k in A.viewkeys() ^ B.viewkeys()}
# Update with `f()` applied to the intersection
merged.update({k: f(A[k], B[k]) for k in A.viewkeys() & B.viewkeys()})
return merged

在 Python 3 中,.viewkeys() 方法已重命名为 .keys(),取代了旧的 .keys()功能(在 Python 2 中返回一个列表)。

上面的 merge() 方法是适用于任何给定 f() 的通用解决方案。

演示:

>>> def f(x, y):
... return x * y
...
>>> A = {1:1, 2:3}
>>> B = {7:3, 2:2}
>>> merge(A, B, f)
{1: 1, 2: 6, 7: 3}
>>> merge(A, B, lambda a, b: '{} merged with {}'.format(a, b))
{1: 1, 2: '3 merged with 2', 7: 3}

关于Python 合并字典与自定义合并功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16560840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com