首页 > 解决方案 > 遍历 3 个字典列表的 for 循环的替代方案

问题描述

所以我看过一些我试图看的帖子,但我的用例有点不同。我有 3 个列表,其中包含多个 dicts,为了从中获取信息,我有时必须通过 2 个或有时全部 3 个。

为此,我目前这样做:

item_dict = {}
excludes = ["excluded devices"]
confirm = "value"
for item in first_list_dict:
    for second_item in second_list_dict:
            for key, value in item.items():
                if value == confirm and item["key"] == "value" and item["key2"] not in excludes and item["key3"] == second_item["key"]:
                     if second_item["key"] not in item_dict:
                         item_dict[second_item["key"]] = [{item["key"]: {"info": item["key"], "mac_address": item["key"]}}]
                     else:
                         item_dict[second_item["key"]].append({item["key"]: {"info": item["key"], "mac_address": item["key"]}})

这看起来像......一团糟,所以让我解释一下我在做什么。

2 个字典列表,其中包含一些单独的数据,但可以使用它们在每个字典中都有的键链接在一起。

for 循环本质上用于确认某些条件存在于单独的列表中,外部值和字典中的键匹配,将项目添加到字典中。

我想知道的是,如果有其他方法可以使用这个嵌套的 for 循环,并且可以解释它是如何工作的,我将非常感激。请随时提出您希望我回答的任何问题,以便我对此进行更多解释。

标签: pythonpython-3.xlistdictionaryfor-loop

解决方案


这里有一些重构开始:

from collections import defaultdict

item_dict = defaultdict(list)
excludes = ["excluded devices"]
confirm = "value"
for item in first_list_dict:
    for value in item.values():
        val1 = item["key"]
        if not (val1 == "value" and value == confirm and item["key2"] not in excludes):
            continue
        for second_item in second_list_dict:
            val2 = second_item["key"]
            if item["key3"] == val2:
                item_dict[val2].append({val1: {"info": val1, "mac_address": val1}})

推荐阅读