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