Python字典交集实现问题:如何返回匹配的键值对而非仅值?
解决字典交集函数的问题
看起来你这代码里藏着好几个小问题,导致结果和预期不符,我帮你一步步捋清楚:
首先先拆解现有代码的问题:
- 变量
j完全没定义,运行时肯定会报NameError,应该是你手滑写错了,原本想写if i in b吧? - 你在循环里一遇到符合/不符合的情况就直接
return,这样只会检查第一个键,后面的键根本没机会遍历到 - 你返回的
({i})是个集合,不是字典,就算逻辑对了,也出不来键值对的形式
要实现「返回键和值均匹配的键值对字典」,正确的思路应该是:
- 初始化一个空字典用来存结果
- 遍历其中一个字典的所有键值对
- 对每个键,先检查它是否存在于另一个字典中,再验证两个字典里该键对应的值是否相等
- 如果都满足,就把这个键值对添加到结果字典里
- 遍历完所有内容后,返回结果字典
修正后的代码可以写成这样:
def intersect(a, b): result = {} for key, value in a.items(): # 检查键在b中,且对应值相等 if key in b and b[key] == value: result[key] = value return result
嫌代码长的话,用字典推导式一行就能搞定:
def intersect(a, b): return {key: value for key, value in a.items() if key in b and b[key] == value}
测试你给的例子:
a = {1:'a1', 2.5:'a2', 4:'a3'} b = {1:'a1', 3:'a2', 5:'a4'} print(intersect(a, b)) # 输出 {1: 'a1'},完全符合你的期望
这样就解决问题啦,要是还有不清楚的地方随时问~
内容的提问来源于stack exchange,提问作者user9214426
相关产品推荐
相关产品推荐

