I have a dictionary with certain keys and lists of couples as elements. I want to perform the following operation: remove every element (couple) from all the lists for which its second element (or first, doesn't really matter) fulfills a certain condition. I tried with a very simple piece of code to do that, but I did not succeed and I in fact noticed a specific behavior: removing an element form a list let's the list's elements for loop skip the following element, for some reason (or at least this is what it looks like to me).
This is a very simple example:
# random dictionary
a = {'a': [[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7]],
'b': [[2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7]]}
def f(d):
# keys in the dicitonary
for key in list(d):
# elements inthe list
for elem in d[key]:
# if the second element of the couple
# satisfies a certain criterion...
if elem[1] >= 2:
# remove that element (first occurrence) from the list
d[key].remove(elem)
return d
b = f(a)
print(b)
This is the output I get:
{'a': [[1, 1], [1, 3], [1, 5], [1, 7]], 'b': [[2, 1], [2, 3], [2, 5], [2, 7]]}
This is what I would like to have:
{'a': [[1, 1]], 'b': [[2, 1]]}
How do I perform the above described operation correctly?
Edit: I know there are some workarounds. My question is now about the skipping thing occurring in the for loop: why does it happen? Why does the code not work as I think it should?
source https://stackoverflow.com/questions/70884328/deleting-elements-from-lists-in-a-dictionary-python
Comments
Post a Comment