一些关于dict的奇妙观察
实验一
首先,创建两个一模一样的字典:
dict1 = {'a': 1}
dict2 = {'a': 1}
然后,进行各种各样的相等判断:
print(dict1 == dict2)
print(dict1.keys() == dict2.keys())
print(dict1.values() == dict2.values())
print(sorted(dict1.values()) == sorted(dict2.values()))
得到令人震惊的结果:
True
True
False
True
看看dict1.values()
和dict2.values()
究竟是何方神圣:
print(dict1.values())
print(dict2.values())
并无不同:
dict_values([1])
dict_values([1])
再看sorted后:
print(sorted(dict1.values()))
print(sorted(dict2.values()))
从dict_values
变为list
了:
[1]
[1]
实验二
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 2, 'a': 1}
print(dict1 == dict2)
print(dict1.keys() == dict2.keys())
print(dict1.values() == dict2.values())
print(sorted(dict1.values()) == sorted(dict2.values()))
print(dict1.values())
print(dict2.values())
print(sorted(dict1.values()))
print(sorted(dict2.values()))
输出:
True
True
False
True
dict_values([1, 2])
dict_values([2, 1])
[1, 2]
[1, 2]
实验三
dict1 = {'a': 1, 'b': 2, 'c': 2}
dict2 = {'b': 2, 'a': 1, 'c': 1}
print(dict1 == dict2)
print(dict1.keys() == dict2.keys())
print(dict1.values() == dict2.values())
print(sorted(dict1.values()) == sorted(dict2.values()))
print(dict1.values())
print(dict2.values())
print(sorted(dict1.values()))
print(sorted(dict2.values()))
输出:
False
True
False
False
dict_values([1, 2, 2])
dict_values([2, 1, 1])
[1, 2, 2]
[1, 1, 2]
结论
- 只要dict1和dict2的key在无序意义下是一致的,
dict1.keys() == dict2.keys()
的结果就为True
(实验二) - 即使dict1和dict2的value在有序意义下是一致的,
dict1.values() == dict2.values()
的结果也为False
(实验一),因此比较两个dict的value必须要sorted