python - 遍历 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 循环,并且可以解释它是如何工作的,我将非常感激。请随时提出您希望我回答的任何问题,以便我对此进行更多解释。
解决方案
这里有一些重构开始:
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}})
推荐阅读
- python - Python:NLTK - 正则表达式标记器产生空输出
- javascript - 货币在具有相同语言环境的 iOS 和 android 上的格式不同
- android - 我怎样才能通过只使用一个 xml 标签来做到这一点
- java - 使用 http 客户端发布 tar.gz 文件时出错,但使用 curl 命令可以正常工作
- ssl - 错误“ERR_INVALID_REDIRECT”到表单登录
- pandas - 在 Pandas 中仅删除行中的第一个值
- laravel - 如何同时删除order和order_mapping表数据
- angular - 在 Angular 中动态更改类
- java - JSON-B 的循环引用问题
- django - 如何使用 django 查询集编写这个原始 SQL 查询?