gpt4 book ai didi

python - 理解python中字典的交集和差异

转载 作者:行者123 更新时间:2023-11-28 19:14:24 29 4
gpt4 key购买 nike

我是 python 的新手,遇到了这个问题,因为英语不是我的母语,所以我在解决这个问题时遇到了一些麻烦,但是根据我从这个问题中理解的内容编写了我的代码,谁能告诉我我是否正确并且如果没有,请改进我的代码或提供你的代码

假设您有两个字典 d1 和 d2,每个字典都有整数键和整数值。还给你一个函数 f,它接受两个整数,对它们执行未知操作,然后返回一个值。

编写一个名为 dict_interdiff 的函数,它接受两个字典(d1 和 d2)。该函数将返回两个字典的元组:一个 d1 和 d2 的交集字典和一个 d1 和 d2 差的字典,计算如下:

'''相交:相交字典的键是 d1 和 d2 中通用的键。要获取相交字典的值,查看 d1 和 d2 中的公共(public)键并应用functionf 到这些键的值——值d1 中公共(public)键的第一个参数d2中公共(public)键的函数和值是函数的第二个参数。不要在 dict_interdiff 代码中实现 f --假设它是在外部定义的。

差异:差异字典中的键值对是(a) 每个键值对在 d1 中,其 key 仅出现在 d1 而不是 d2 或 (b) 每个d2 中的键值对 key 只出现在 d2 中,不出现在 d1 中。'''

这里有两个例子:*

'''If f(a, b) returns a + b
d1 = {1:30, 2:20, 3:30, 5:80}
d2 = {1:40, 2:50, 3:60, 4:70, 6:90}
then dict_interdiff(d1, d2)
returns ({1: 70, 2: 70, 3: 90}, {4: 70, 5: 80, 6: 90})


If f(a, b) returns a > b
d1 = {1:30, 2:20, 3:30}
d2 = {1:40, 2:50, 3:60}
then dict_interdiff(d1, d2)
returns ({1: False, 2: False, 3: False}, {})'''

这是我的代码:

def dict_interdiff(d1, d2):

a=d1.keys()
b=d2.keys()
c=d1.values()
d=d2.values()
e=()
u={}
f=[]
g=[]
for i in range(max(a,b)):
if a[i]==b[i]:
u=f(a[i],b[i])
elif a[i] not in b:
t=c.find(a[i])
f.append(c[t])
g.append(a[i])
k=dict(zip(g,f))
elif b[i] not in a:
t=c.find(b[i])
f.append(d[t])
g.append(b[i])
k=dict(zip(g,f))
e+(u,)+(k,)
return e

此外,我无法检查我的代码,因为它假定 f 已定义,而我不知道这一点,因此无法在我的解释器中运行

最佳答案

您可以使用对字典的集合操作来完成这一切:

def dict_interdiff(d1, d2):
# symmetric difference, keys in either d1 or d2 but not both.
sym_diff = d1.viewkeys() ^ d2
# intersection, keys that are common to both d1 and d2.
intersect = d1.viewkeys() & d2
# apply f on values of the keys that common to both dicts.
a = {k: f(d1[k], d2[k]) for k in intersect}
b = {k: d1[k] for k in sym_diff & d1.viewkeys()}
# add key/value pairings from d2 using keys that appear in sym_diff
b.update({k: d2[k] for k in sym_diff & d2.viewkeys()})
return a,b

sym_diff = d1.viewkeys() ^ d2 获取 Symmetric_difference或者 ab 中的键,但不在两者中

intersect = d1.viewkeys() & d2 得到 intersection键的数量,即同时出现在 d1 和 d2 中的键。

b = {k: d1[k] for k in sym_diff.viewkeys() & d1} 创建一个包含 d1 中出现在 sym_diff 集中的键的字典。

b.update({k: d2[k] for k in sym_diff.viewkeys() & d2}) 更新 b 添加来自 d2 的键/值对,使用出现在sym_diff 所以你最终得到一个字典 b,它包含 sym_diff 集合中的所有键及其值。

关于python - 理解python中字典的交集和差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439162/

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