为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-09-11 20:25:32
创建列表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)


查看完整回答
反对 回复 2021-09-11
?
守候你守候我

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)


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号