簡體   English   中英

比較字典和字典列表 Python

[英]Comparing a dictionary and a list of dictionaries Python

我是 Python 的新手。

我正在嘗試將字典結果與字典列表d進行比較。 如果它等於列表d中的字典(除了缺少結果“名稱”鍵),我應該打印其中一個值(名稱),如果不等於任何 - 打印不匹配。

特別是: d - 字典列表:

[OrderedDict([('name', 'Alice'), ('AAA', '2'), ('BBB', '8'), ('CCC', '3')]), OrderedDict([('name', 'Bob'), ('AAA', '4'), ('BBB', '1'), ('CCC', '5')]), 
OrderedDict([('name', 'Charlie'), ('AAA', '3'), ('BBB', '2'), ('CCC', '5')])]

結果- 字典:

{'AAA': 4, 'BBB': 1, 'CCC': 5}

由於結果與字典列表d的相似部分相同,因此我應該在該 d 字典列表中返回“名稱”(在本例中為 Bob)

我正在嘗試以下代碼,但它似乎不起作用:

for i in range(len(d)):
    if key in d[i] != 'name':
        for k, v in results.items and d[i].items():
            if results.items() == d[i].items():
                print(d[i]['name'])
else:
    print("No match")

如果你能提供一些簡單和更詳細的解釋,我會很高興,因為我還沒有高級:)

謝謝!

這是一個單行:

next((x["name"] for x in d
      if results == {k: int(v) for k, v in x.items() if k != 'name'}),
     "No match")
# Output: 'Bob'

好吧,所以這不是很有幫助。 讓我們調試您的代碼。

for k, v in results.items and d[i].items():
    if results.items() == d[i].items():

您的代碼中的問題是您將鍵值對列表作為序列進行比較。 無法保證常規 dict(非 OrderedDict)會以與 OrderedDict 相同的順序為您提供.items() 相反,您可以說(帶有一點 dict-comprehension:

if {k: int(v) for k, v in d[i].items() if k != 'name'} == result:
    print(d[i]["name"])

PS:請使用稍微好一點的: for item in items: something(item)而不是for i in range(len(items)): something(items[i])構造。 把它和一點列表/字典理解放在一起,你會在第一行得到答案。 :)

容易理解:

done = False
for di in d:
    l = list(di.values())
    l.pop(0)
    l = [int(i) for i in l]
    if l == list(results.values()):
        print(di['name'])
        done = True
if done == False:
    print('no match found')

Output 為您的結果字典:

Bob

暫無
暫無

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

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