gpt4 book ai didi

python - 两本词典的交集和差集

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:35 27 4
gpt4 key购买 nike

给定两个字典,我想查看它们的交集和差异并对相交的元素执行 f 函数并对唯一元素执行 g,以下是我如何找出唯一元素和相交元素是什么,其中 d1 和 d2 是两个字典,如何打印出 d_intersection 和 d_difference 作为元组中的字典?输出应该看起来像这样 ({intersecting keys,values}, {difference keys,values})例如:给定

d1 = {1:30, 2:20, 3:30, 5:80}

d2 = {1:40, 2:50, 3:60, 4:70, 6:90}

输出应该是({1: 70, 2: 70, 3: 90}, {4: 70, 5: 80, 6: 90})

dic = {}
d_intersect = set(d1) & set(d2)
d_difference = set(d1) ^ set(d2)
for i in d_intersect:
dic.update({i : f(d1[i],d2[i])})
for j in d_difference:
dic.update({j : g(d1[j],d2[j])})

谁能告诉我哪里出错了,为什么我的代码给出关键错误 4?

最佳答案

^ 寻找对称差异 时,您会得到4KeyError,这意味着 key 两者都是唯一的,键不在中。您也不需要创建集合,您可以使用 view object从调用 .keys 返回

d1 = {1: 30, 2: 20, 3: 30, 5: 80}

d2 = {1: 40, 2: 50, 3: 60, 4: 70, 6: 90}

# d1.keys() ^ d2 -> {4, 5, 6}, 4, 6 unique to d2, 5 unique to d1.
symm = {k: d1.get(k, d2.get(k)) for k in d1.keys() ^ d2}
inter = {k: d2[k] + d1[k] for k in d1.keys() & d2}

d1.get(k, d2.get(k)) 适用于对称差异,因为它会在我们从 d2< 获取唯一 key 时捕获.

python2 的代码略有不同,您需要将 .keys 替换为 .viewkeys 以获得 view object:

 {k: d1.get(k, d2.get(k)) for k in d1.viewkeys() ^ d2}
{k: d2[k] + d1[k] for k in d1.viewkeys() & d2}

要获得两个集合之间的区别,即 a 中有什么 b 中没有,您需要 -:

In [1]: d1 = {1: 30, 2: 20, 3: 30, 5: 80}

In [2]: d2 = {1: 40, 2: 50, 3: 60, 4: 70, 6: 90}

In [3]: {k: d2[k] for k in d2.keys() - d1}
Out[3]: {4: 70, 6: 90}

In [4]: {k: d1[k] for k in d1.keys() - d2}
Out[4]: {5: 80}
In [5]: d2.keys() - d1 # in d2 not in d1
Out[5]: {4, 6}

In [6]: d1.keys() - d2 # in d1 not in d2
Out[6]: {5}

In [7]: d1.keys() ^ d2 # unique to either
Out[7]: {4, 5, 6}

对称差异就像做差异的并集:

In [12]: d1.keys() - d2 |  d2.keys() - d1
Out[12]: {4, 5, 6}

所有运算符都在 python docs 中讨论,也是 Set_(mathematics) 上的维基页面给你一个很好的概述。

关于python - 两本词典的交集和差集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805266/

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