直接比较字典和将它们转换为集合后比较它们有什么区别?

时间:2018-03-08 20:52:01

标签: python-3.x

所以我看到这个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的实例)比较相等,当且仅当它们有   等于(键,值)对。键和值的平等比较   强制反身性。

1 个答案:

答案 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