所以我看到这个question表示将两个词典与==进行比较,Python将查看两个词典的每个键并检查每个值是否相同。我正在编写一些单元测试,我想检查以确保我从网站上提取的一些数据与我之前在邮递员中提取的数据匹配,并保存到文本文件中。为什么比较下面的字典会返回false,但返回那些相同的字典作为集合,返回true?
records = self.get_raw_records(form_id) #this pulls the data
with open("Sample Pull Data.txt", "r") as file:
contents = json.load(file) #this is the data I already pulled
print(contents[0]==records[0]) #false
print(set(contents[0]) == set(records[0])) #true
file.close()
我注意到键的顺序各不相同,但符合链接的问题,或者更重要的是来自3.6 docs:并不重要。
映射(dict的实例)比较相等,当且仅当它们有 等于(键,值)对。键和值的平等比较 强制反身性。
答案 0 :(得分:1)
set
仅包含字典中的键 - 而不是键和值。正如文档所说,dict比较测试如果它们具有相等的(键,值)对。
这样做set
比较等同于进行dict.keys()
比较(实际上keys()
可以在python 3中用作集合。)
a = {1:1}
b = {1:2}
a == b
# False
set(a) == set(b)
# True
a.keys() == b.keys()
# True
set(a) == a.keys()
# True