gpt4 book ai didi

python - 基于自定义函数按键合并字典的值

转载 作者:行者123 更新时间:2023-11-30 23:13:27 24 4
gpt4 key购买 nike

假设您有两个字典,并且您希望通过将函数应用于具有匹配键的值来合并两个字典。这里我使用 + 运算符作为二元函数。

x = { 1: "a", 2: "b", 3: "c" }
y = { 1: "A", 2: "B", 3: "C" }

result = { t[0][0]: t[0][1] + t[1][1] for t in zip(sorted(x.items()), sorted(y.items())) }

print result # gives { 1: "aA", 2: "bB", 3: "cC" }

我更喜欢一个独立的表达式而不是语句,但这是不可读的。

到目前为止我正在做:

def dzip(f, a, b):
least_keys = set.intersection(set(a.keys()), set(b.keys()))
copy_dict = dict()
for i in least_keys.keys():
copy_dict[i] = f(a[i], b[i])
return copy_dict

print dzip(lambda a,b: a+b,x,y)

是否有比我给出的表达式更具可读性的解决方案?

最佳答案

在第一种情况下,您可以直接使用字典理解:

>>> x = { 1: "a", 2: "b", 3: "c" }
>>> y = { 1: "A", 2: "B", 3: "C" }
>>> {key: x.get(key, "") + y.get(key, "") for key in set.intersection(set(x.keys()), set(y.keys()))}
{1: 'aA', 2: 'bB', 3: 'cC'}

因此,在第二段代码中,您可以将其简化为简单的一行代码:

def dzip(f, a, b):
return {key: f(a.get(key, ""), b.get(key, "")) for key in set.inersection(set(a.keys()) + set(b.keys()))}

您甚至可以将 dzip 定义为 lambda:

dzip = lambda f, a, b: {key: f(a.get(key, ""), b.get(key, "")) 
for key in set.intersection(set(a.keys()), set(b.keys()))}

在一次运行中,这将变为:

>>> dzip = lambda f, a, b: {key: f(a.get(key, ""), b.get(key, "")) 
... for key in set.intersection(set(a.keys()), set(b.keys()))}
>>>
>>> print dzip(lambda a,b: a+b,x,y)
{1: 'aA', 2: 'bB', 3: 'cC'}

请注意,即使 x 和 y 有不同的键集(只是可能会破坏您的第一个代码版本),这也会起作用。

关于python - 基于自定义函数按键合并字典的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29315551/

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