从 for 循环中的列表中删除元素

Removing element from a list in a for loop

我有一个列表,其中包含带有字典的列表。我正在尝试检查字典中某个键的值之一,如果它尝试了,那么我会从列表中删除该列表。我对这里发生的列表和字典的层次有点困惑,我认为我有一个很好的解决方案,但是当我按照我认为可行的方式执行时,它似乎与 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 ]