工作过程中,有的时候会遇到比较两个字典是否相等的问题,第一直观的印象就是对两个字典的键和值进行遍历,然后逐一进行比较看是否相等,这种是最容易想到的,其实在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