猿问

删除包含某些键的列表下的所有字典

创建列表


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'}]

只删除偶数,为什么?


HUH函数
浏览 196回答 3
3回答

尚方宝剑之说

发生这种情况是因为您用于删除元素的循环。您在迭代列表时正在更改列表。如果您在循环中添加打印语句,则更好的解释您将了解正在发生的事情: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)

守候你守候我

发生这种情况是因为您在循环时更改了可迭代对象。最好不要从列表中删除元素,而是将您需要的元素附加到新列表中并反转您的条件:new_list = []for i in list:    if i['key']!='yes':            new_list.append(i)或者您也可以filter在没有for循环的情况下用于该目的:list = filter(lambda x: x['key'] != 'yes', list)
随时随地看视频慕课网APP

相关分类

Python
我要回答