为什么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
相关产品推荐
相关产品推荐

