簡體   English   中英

鍵亂序時比較字典列表

[英]Comparing list of dictionaries when the keys are out of order

我有 2 個字典列表。

a = [{"name": "hello", "city": "xyz"},{"city": "rty", "name": "ert"}]
b = [{"city": "xyz","name": "hello"},{"name": "ert", "city": "rty"}]

以上兩個列表是相等的。 但是,如果我使用==進行比較,則會給出False 當鍵可能無序時,如何檢查兩個字典列表之間的相等性?

我很確定你不知何故犯了一個錯誤。 我和其他人得到True

>>> a = [{"name": "hello", "city": "xyz"},{"city": "rty", "name": "ert"}]
>>> b = [{"city": "xyz","name": "hello"},{"name": "ert", "city": "rty"}]
>>> a == b
True

這就是它應該做的。

關於OrderedDict的文檔說(強調我的):

OrderedDict對象和其他Mapping對象之間的相等性測試與常規字典一樣順序不敏感

關於值比較的文檔說明了這一點,這些字典就是這種情況:

映射( dict實例)比較相等當且僅當它們具有相等的(鍵,值)對。

如果您想知道每個列表是否具有相同的字典,即使 dict 元素可能不在列表中的相同位置(正如您在評論中提到的),您可以使用:

a = [{"name": "hello", "city": "xyz"},{"city": "rty", "name": "ert"}]
b = [{"name": "ert", "city": "rty"}, {"city": "xyz","name": "hello"}]

print(a == b)
print(sorted(a, key=lambda d: sorted(d.items())) == sorted(b, key=lambda d: sorted(d.items())))

輸出:

False
True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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