python - 从 for 循环中的列表中删除元素
问题描述
我有一个列表,其中包含带有字典的列表。我正在尝试检查字典中某个键的值之一,如果尝试,则从列表中删除该列表。我对这里发生的列表和字典层有点困惑,我认为我有一个很好的解决方案,但是当我按照我认为可行的方式进行操作时,它似乎与 for 循环的索引相混淆,然后只有第一个匹配被删除。
这是我正在做的一个例子。
master_list = [
{"irrelevant_key": "irrevelant_value",
"releveant_key":
[{"first_value": "first_key"}, {"problem_key": 0}],
[{"second_value": "second_key"}, {"problem_key": 1}]
}]
for index, key in enumerate(master_list):
for item in master_list[index]["relevant_key"]:
if item[1]["problem_key"] == 0:
master_list[index]["relevant_key"].remove(item)
所以我确信有一种更优雅更好的方法可以通过某种理解来做到这一点,但我注意到的是,当我删除项目时,其余项目会返回一个,因此迭代不会像我一样工作预计。
解决方案
在循环遍历列表时从列表中删除元素不是一个好主意。您可以随时复制并更新它:
import copy
my_list= copy.deepcopy(master_list)
但是,更好的方法是使用列表推导:
master_list = [{"irrelevant_key": "irrevelant_value",
"relevant_key":
[[{"first_value": "first_key"}, {"problem_key": 0}],
[{"second_value": "second_key"}, {"problem_key": 1}]],
}]
for lst in master_list:
lst['relevant_key'] = [x for x in lst['relevant_key'] if x[1]['problem_key'] != 0 ]
推荐阅读
- java - 如何使用 Spring 的 @RequestScope 中计算的值初始化我的域的数据类属性?
- python - 使用布尔索引更改值
- nuxt.js - 如何预缓存未访问的页面并缓存运行时 API GET 请求?(Nuxt PWA 工作箱)
- hubspot - hubspot 上的无效联系
- android - 安卓手机放大按钮的键码是什么?
- c# - 在 ASP.NET 中设置自定义 WebHook 接收器的最佳方法?
- java - android上的OpenGL ES在调用glCreateShader()时崩溃
- javascript - 排序数组以首先从今天开始
- android - Android Firebase 云消息传递令牌 (FCM) 令牌太短/不完整
- json - 如何使用弹性搜索查询从 json 文件中检索特定字段?