Object is a decoded json object that contains a list called items.
obj = json.loads(response.body_as_unicode())
for index, item in enumerate(obj['items']):
if not item['name']:
obj['items'].pop(index)
I iterate over those items and want to remove an item when a certain condition is met. However this is not working as expected. After some research I found out that one cannot remove items from a list while at the same time iterating of this list in python. But I cannot apply the mentioned solutions to my problem. I tried some different approaches like
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)
But this removes all items instead of just the one not having a name. Any ideas how to solve this?
解决方案
Don't remove items from a list while iterating over it; iteration will skip items as the iteration index is not updated to account for elements removed.
Instead, rebuild the list minus the items you want removed, with a list comprehension with a filter:
obj['items'] = [item for item in obj['items'] if item['name']]
or create a copy of the list first to iterate over, so that removing won't alter iteration:
for item in obj['items'][:]: # [:] creates a copy
if not item['name']:
obj['items'].remove(item)
You did create a copy, but then ignored that copy by looping over the list that you are deleting from still.