Python字典值比较代码报错排查与正确实现方案
问题分析与解决方案
原代码存在的问题
- 遍历逻辑完全偏离需求:需求要求先判断键是否同时存在于两个字典,原代码却直接遍历两个字典的所有值做两两对比,完全没用到键的信息,根本不符合规则。
- 错误的判断条件引发类型错误:
d1 in d2这个写法完全错误,d1和d2都是数值(int/float),in操作符需要右侧是可迭代对象(比如列表、字符串),用在数值上直接触发TypeError,这就是报错的直接原因。 - 结果字典赋值方式错误:原代码里
C1 = d1是把单个数值覆盖整个字典变量,而不是往字典里添加键值对,最终根本得不到期望的字典结构。
正确代码实现
按照需求逻辑,我们需要先处理两个字典的共同键,对比值后分配到对应结果字典;再处理各自独有的键,直接加入结果字典:
D1 = {1: 1.5, 2: 6, 3: 99, 4: 12, 5: 45, 6: 55, 7: 0} D2 = {6: 11, 4: 15, 1: 80, 2: 3, 3: 3, 5: 72, 34: 1, 35: 66} C1 = {} C2 = {} # 处理两个字典共有的键 common_keys = set(D1.keys()) & set(D2.keys()) for key in common_keys: val1 = D1[key] val2 = D2[key] if val1 > val2: C1[key] = val1 elif val2 > val1: C2[key] = val2 # 处理D1独有的键,直接加入C1 for key in D1.keys() - common_keys: C1[key] = D1[key] # 处理D2独有的键,直接加入C2 for key in D2.keys() - common_keys: C2[key] = D2[key] print(C1) print(C2)
执行这段代码后,输出结果和期望完全一致:
{2: 6, 3: 99, 6: 55, 7: 0} {1: 80, 4: 15, 5: 72, 34: 1, 35: 66}
内容的提问来源于stack exchange,提问作者user19092610
相关产品推荐
相关产品推荐

