Python 删除字典列表中的dict-并非所有元素都被删除,需要多次循环
我有一份长度为793的字典清单。当我试图根据if语句从列表中删除元素时,并不是所有元素都被删除。有几个元素仍然保留在列表中,所有元素只有在同一代码的多次迭代后才会被删除Python 删除字典列表中的dict-并非所有元素都被删除,需要多次循环,python,list,dictionary,Python,List,Dictionary,我有一份长度为793的字典清单。当我试图根据if语句从列表中删除元素时,并不是所有元素都被删除。有几个元素仍然保留在列表中,所有元素只有在同一代码的多次迭代后才会被删除 >>> len(data_list) 793 >>> for i, device in enumerate(data_list): ... if 'PSS' in device['type']: ... print (i) ... del (d
>>> len(data_list)
793
>>> for i, device in enumerate(data_list):
... if 'PSS' in device['type']:
... print (i)
... del (data_list[i])
...
47
83
127
207
279
...
...
734
745
746
747
>>> for i, device in enumerate(data_list):
... if 'PSS' in device['type']:
... print (i)
... del (data_list[i])
...
279
313
355
399
440
443
471
499
505
515
528
734
>>> for i, device in enumerate(data_list):
... if 'PSS' in device['type']:
... print (i)
... del (data_list[i])
...
734
>>> for i, device in enumerate(data_list):
... if 'PSS' in device['type']:
... print (i)
... del (data_list[i])
...
>>>
在列表上迭代并同时在其上删除/添加元素不是一个好主意,因为当您删除索引
i
处的元素时,下一个(i+1
)移动到位置i
,但是循环继续,并为您提供i+1
,因此您错过了它。事实上,您将错过紧跟在匹配元素之后的元素
更好的方法恰恰相反:保留匹配的
- 使用列表编译
data_list = [device for device in data_list if 'PSS' in device['type']]
- 使用过滤器
data_list = list(filter(lambda device:'PSS' in device['type'], data_list))