[英]How can I implement a function that can do the comparison for dictionaries?
我陷入了一個非常簡單的問題。 我需要在Python 3中實現檢查和減號功能,該功能可以先執行檢查,然后對字典進行減法。 例如:
d1 = {'a': 10, 'b': 9, 'c': 8, 'd': 7}
d2 = {'a': 1, 'b': 2, 'c': 3, 'e': 2}
result = check(d1, d2)
校驗函數比較兩個字典,並返回True
如果所述第一參數大於所述第二參數越大,並返回False
如果第二字典較大。
在此示例中,由於d2
具有"e:2"
但d1
沒有,因此結果應返回False
。
簡而言之,我想實現一個檢查函數,僅當d2
是d1
的子集時才返回True,這意味着d1
包括d2
所有鍵,並且對於每個鍵的值, d1
也大於d2
。
檢查功能應該能夠檢查d1
包含d2
所有鍵,並且d1
的值也大於d2
(我希望減法后新字典(d3)中不會出現任何負值。)
我相信有一種非常簡單的方法可以在Python 3中實現此功能。
Python字典有一個keys()
方法,可讓您訪問字典中的鍵。 從keys()
返回的對象的優點之一是它的作用類似於set ,因此您可以輕松地測試一個對象是否是另一個的超集/子集:
d1 = {'a': 10, 'b': 9, 'c': 8, 'd': 7}
d2 = {'a': 1, 'b': 2, 'c': 3, 'e': 2}
d1.keys() >= d2.keys()
# false
您可以使用all()
確定列表中的每個值是否為true,因此一旦知道d1是d2的超集,就可以查看是否:
all(d1[k] >= d2[k] for k in d2)
是真的。
您可以將它們組合:
d1.keys() >= d2.keys() and all(d1[k] >= d2[k] for k in d2)
但是順序很重要-您需要首先檢查d1
是否具有d2
所有鍵,否則當您嘗試查找不存在的鍵時all()
的表達式將引發異常。 如果第一部分為false而不檢查第二部分,則以上內容將返回false,因此您可以避免使用此順序的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.