Python中同一字典keys()与values()相等判断返回False问题
问题原因
1. 直接判等的两个对象类型不同
Python 3 中字典的keys()方法返回的是dict_keys类型的视图对象,values()方法返回的是dict_values类型的视图对象,二者属于完全不同的类,不同类型的对象直接做==判等默认返回False,和内部承载的内容无关。
你可以执行以下代码验证二者的类型差异:
# 注意不要用list作为变量名,会覆盖Python内置的list类型,这里改名为my_dict my_dict = {"Text":"Text"} print(type(my_dict.keys())) print(type(my_dict.values()))
2. 正确的内容对比方式
如果你需要判断字典的键集合和值集合内容是否一致,需要先把二者转为相同类型的可迭代对象再对比:
- 如果你使用的是Python 3.7及以上版本(字典默认按插入顺序存储),需要按顺序匹配键值,可以转成列表对比:
my_dict = {"Text":"Text"} if list(my_dict.keys()) == list(my_dict.values()): print("True") else: print("False")
上述代码会输出你预期的True。
- 如果你不需要考虑顺序,只需要判断所有键和所有值的元素完全重合,可以转成集合对比:
my_dict = {"Text":"Text"} if set(my_dict.keys()) == set(my_dict.values()): print("True")
额外注意
不要使用list、dict这类Python内置类型名作为自定义变量名,会覆盖原有的内置方法/类型定义,导致后续代码出现不可预期的错误。
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

