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\']):
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.
Use a while
loop and change the iterator as you need it:
obj = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# remove all items that are smaller than 5
index = 0
# while index in range(len(obj)): improved according to comment
while index < len(obj):
if obj[index] < 5:
obj.pop(index)
# do not increase the index here
else:
index = index + 1
print obj
Note that in a for
loop the iteration variable cannot be changed. It will always be set to the next value in the iteration range. Therefore the problem is not the enumerate
function but the for
loop.
And in the future please provide a verifiable example. Using a json object in the example is not sensible because we do not have this object.