创建列表list=[]for i in range(0,15): dict={} dict['number']=i dict['key']='yes' list.append(dict)print(list)我们有类似的东西:[{'number': 0, 'key': 'yes'}, {'number': 1, 'key': 'yes'}, {'number': 2, 'key': 'yes'}, {'number': 3, 'key': 'yes'}, {'number': 4, 'key': 'yes'}, {'number': 5, 'key': 'yes'}, {'number': 6, 'key': 'yes'}, {'number': 7, 'key': 'yes'}, {'number': 8, 'key': 'yes'}, {'number': 9, 'key': 'yes'}, {'number': 10, 'key': 'yes'}, {'number': 11, 'key': 'yes'}, {'number': 12, 'key': 'yes'}, {'number': 13, 'key': 'yes'}, {'number': 14, 'key': 'yes'}]然后尝试删除所有包含的字典 'key'=='yes'for i in list: if i['key']=='yes': list.remove(i)print(list)我们有:[{'number': 1, 'key': 'yes'}, {'number': 3, 'key': 'yes'}, {'number': 5, 'key': 'yes'}, {'number': 7, 'key': 'yes'}, {'number': 9, 'key': 'yes'}, {'number': 11, 'key': 'yes'}, {'number': 13, 'key': 'yes'}]只删除偶数,为什么?
3 回答

尚方宝剑之说
TA贡献1788条经验 获得超4个赞
发生这种情况是因为您用于删除元素的循环。您在迭代列表时正在更改列表。
如果您在循环中添加打印语句,则更好的解释您将了解正在发生的事情:
for i in list:
print(i)
if i['key']=='yes':
list.remove(i)
输出是:
{'number': 3, 'key': 'yes'}
{'number': 7, 'key': 'yes'}
{'number': 11, 'key': 'yes'}
要解决这个问题,您可以将元素添加到新列表中,然后将其删除。
to_delete_list = []
for i in list:
if i['key']!='yes':
to_delete_list.append(i)

守候你守候我
TA贡献1802条经验 获得超10个赞
发生这种情况是因为您在循环时更改了可迭代对象。最好不要从列表中删除元素,而是将您需要的元素附加到新列表中并反转您的条件:
new_list = []
for i in list:
if i['key']!='yes':
new_list.append(i)
或者您也可以filter在没有for循环的情况下用于该目的:
list = filter(lambda x: x['key'] != 'yes', list)
添加回答
举报
0/150
提交
取消