You need to enable JavaScript to run this app. 为什么Python中字典values()直接比较不生效?如何比对值的频率?
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python中字典values()直接比较不生效?如何比对值的频率?

直接比较dict.values()不生效的原因

Python 3中dict.values()返回的是字典视图对象,该类型没有实现按内容匹配的相等比较逻辑,即使两个视图打印内容完全一致,分别来自不同字典的视图对象做==运算时也会返回False,属于正常的设计规则,并非操作不被允许。

实现值频率一致比较的方案

你需要的是统计两个字典值的出现频率是否相同,和键无关、和值的顺序也无关,最适配的方案如下:

方法1:使用Counter统计频率后比较

collections.Counter可以统计可迭代对象中各元素的出现次数,直接比较两个Counter对象即可判断频率是否匹配,支持值有重复的场景:

from collections import Counter

dict1 = {'a':1, 'b':2, 'c':3}
dict2 = {'x':1, 'y':2, 'z':3}

if Counter(dict1.values()) == Counter(dict2.values()):
    print("Equal")
else:
    print("Not Equal")

运行后会输出Equal,符合你的预期。

方法2:顺序敏感场景的补充方案

如果你使用的是Python 3.7+版本(字典默认保留插入顺序),同时要求值的插入顺序也完全相同,可以先将视图对象转为列表再比较:

if list(dict1.values()) == list(dict2.values()):
    print("Equal")
else:
    print("Not Equal")

该方法对值的顺序敏感,如果两个字典值的频率相同但插入顺序不同,会返回False,仅适合有顺序匹配要求的场景。

内容的提问来源于stack exchange,提问作者Aman Chourasiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:54:09