工作過程中,有的時候會遇到比較兩個字典是否相等的問題,第一直觀的印象就是對兩個字典的鍵和值進行遍歷,然後逐一進行比較看是否相等,這種是最容易想到的,其實在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