首页 > 解决方案 > 从 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)

所以我确信有一种更优雅更好的方法可以通过某种理解来做到这一点,但我注意到的是,当我删除项目时,其余项目会返回一个,因此迭代不会像我一样工作预计。

标签: pythonpython-3.xlist-comprehensiondictionary-comprehension

解决方案


在循环遍历列表时从列表中删除元素不是一个好主意。您可以随时复制并更新它:

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 ]

推荐阅读