Object 是一个解码后的 json 对象,其中包含一个名为 items 的列表。
obj = json.loads(response.body_as_unicode())
for index, item in enumerate(obj['items']):
if not item['name']:
obj['items'].pop(index)
我迭代这些项目并希望在满足特定条件时删除项目。然而,这并没有按预期工作。经过一番研究,我发现在 python 中迭代该列表的同时无法从列表中删除项目。但我无法将上述解决方案应用于我的问题。我尝试了一些不同的方法,例如
obj = json.loads(response.body_as_unicode())
items = obj['items'][:]
for index, item in enumerate(obj['items']):
if not item['name']:
obj['items'].remove(item)
但这会删除所有项目,而不仅仅是没有名称的项目。有什么想法如何解决这个问题吗?
迭代列表时不要从列表中删除项目;迭代将跳过项目因为迭代索引不会更新以考虑删除的元素。
反而,rebuild列表减去您要删除的项目,并带有列表理解带过滤器:
obj['items'] = [item for item in obj['items'] if item['name']]
或创建一个copy首先迭代列表的列表,这样删除就不会改变迭代:
for item in obj['items'][:]: # [:] creates a copy
if not item['name']:
obj['items'].remove(item)
您确实创建了一个副本,但随后ignored通过循环遍历要从中删除的列表来复制该副本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)