簡體   English   中英

如何實現可以比較字典的功能?

[英]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

簡而言之,我想實現一個檢查函數,僅當d2d1的子集時才返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM