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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章