Python2.X 和 Python3.X 之间 比较两个字典是否相等的异同之处

工作过程中,有的时候会遇到比较两个字典是否相等的问题,第一直观的印象就是对两个字典的键和值进行遍历,然后逐一进行比较看是否相等,这种是最容易想到的,其实在Python中为我们提供相应的函数可以用来比较两个字典是否相等:

dict1 = {'name': '小明', 'age': 19, 'height': 1.75}
dict2 = {'name': '小白', 'age': 18, 'height': 1.76}
dict3 = {'name': '小明', 'age': 19, 'height': 1.75}

1、直接用 " == " 进行比较,这种无论是 Python2.x 还是Python3.x 都可以使用,最终的比较结果返回的是布尔类型的(True或者False),只不过打印语句格式的书写方式不一样而已

Python2.x

print dict1 == dict3    # True

result = dict1 == dict2 # False
print result

Python3.x

result = dict1 == dict3  # True
print(result)

print(dict2 == dict3)    # False

2、利用不同的函数进行比较:

Python 2.x

使用的函数是: cmp(),其的返回结果是 0 和 -1,如果两个字典相等返回 0,不相等则返回 -1

result = cmp(dict1, dict3)  # 0
print 'dict1 和 dict3的比较结果为:', result

result = cmp(dict2, dict3)  # -1
print 'dict2 和 dict3的比较结果为:', result

result = cmp(dict2, dict1)  # -1
print 'dict2 和 dict1的比较结果为:', result

____________________________________________

dict1 和 dict3的比较结果为: 0
dict2 和 dict3的比较结果为: -1
dict2 和 dict1的比较结果为: -1

Python3.x

使用的是 operator 模块中的 eq() 函数,其的返回结果是布尔类型:True 或者 False

如果在 Python3.x中还是用 cmp() 来进行比较的话,会报以下错误:NameError: name 'cmp' is not defined

import operator

result = operator.eq(dict1, dict3)  # True
print('dict1 和 dict3的比较结果为:', result)

result = operator.eq(dict2, dict3)  # False
print('dict2 和 dict3的比较结果为:', result)

result = operator.eq(dict2, dict1)  # False
print('dict2 和 dict1的比较结果为:', result)

_____________________________________________

dict1 和 dict3的比较结果为: True
dict2 和 dict3的比较结果为: False
dict2 和 dict1的比较结果为: False

 

 

你可能感兴趣的:(Python)