簡體   English   中英

如何在某些條件下遍歷 2 個壓縮的字典列表?

[英]How to iterate through 2 zipped list of dictionaries under certain conditions?

字典列表有 4 個,前兩個需要添加到數據庫中,第二個 2 已經存在於數據庫中:

to_add1 = [{'name': 'Kate', 'age': 25, 'id': 1234},
           {'name': 'Claire', 'age': 25, 'id': 4567},
           {'name': 'Bob', 'age': 25, 'id': 8910}]

to_add2 = [{'pets': 5, 'name_id': 1234},
           {'pets': 0, 'name_id': 4567},
           {'pets': 0, 'name_id': 8910}]

existing1 = [{'name': 'John', 'age': 50, 'id': 0000},
             {'name': 'Claire', 'age': 25, 'id': 4567}]
existing2 = [{'pets': 2, 'name_id': 0000},
             {'pets': 0, 'name_id': 4567}]

我想添加到數據庫或在這個可重現的示例中,僅打印不包含existing1['name']值的項目existing1 所以在這種情況下:來自to_add1的 Kate 和 Bob 應該被打印一次。 由於雙循環,我得到了重復。 如何遍歷所有這些字典並打印與existing 1的名稱匹配的名稱而不重復的項目?

我的代碼:

for person_to_add, pet_to_add in zip(to_add1, to_add2):
    for existing_person, existing_pet in zip(existing1, existing2):
        if person_to_add['name'] not in existing_person['name']:
            print(person_to_add)

當前 output:

{'name': 'Kate', 'age': 25, 'id': 1234}
{'name': 'Kate', 'age': 25, 'id': 1234}
{'name': 'Claire', 'age': 25, 'id': 4567}
{'name': 'Bob', 'age': 25, 'id': 8910}
{'name': 'Bob', 'age': 25, 'id': 8910}

所需的 output:

{'name': 'Kate', 'age': 25, 'id': 4567}
{'name': 'Bob', 'age': 25, 'id': 8910}

我假設您的意思是 output 應該是Kate & Bob因為Claireexisting1

>>> for person_to_add, pet_to_add in zip(to_add1, to_add2):
...     if person_to_add not in existing1:
...         print(person_to_add)
... 
{'name': 'Kate', 'age': 25, 'id': 1234}
{'name': 'Bob', 'age': 25, 'id': 8910}

根據實際基礎查詢的復雜性,這可能不起作用。 但這是一個利用您正在使用的字典結構列表的解決方案。 我不清楚為什么需要使用 zip。

a = [person_to_add for person_to_add in to_add1 if person_to_add['name'] not in [existing_person['name'] for existing_person in existing1]]

這使用應該非常快的列表推導。 output 'a' 將與您的所有其他數據(即字典列表)采用相同的格式。 如果您需要進一步了解列表理解的工作原理,請告訴我。

lst = [print(person_to_add) for person_to_add in to_add1 if person_to_add not in existing1]

它可能不是最快的解決方案,但它可以完成工作。 它使用 python 列表理解,並且易於閱讀。

正如您在問題中描述的那樣,您只想比較 existing1 和 to_add1 中的數據,因此您不需要使用嵌套循環來增加不必要的復雜性。 使用單個循環就可以了。

暫無
暫無

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

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