Michael C wrote: > I am trying to remove incorrect entries of my dictionary. > I have multiple keys for the same value, > > ex, > [111]:[5] > [222]:[5] > [333]:[5} > > and I have found out that some key:value pairs are incorrect, and the best > thing to do > is to delete all entries who value is 5. So this is what I am doing: > > import numpy > read_dictionary = numpy.load('loc_string_dictionary.npy').item() > > for n in read_dictionary: > print(read_dictionary[n]) > if read_dictionary[n] == '5': > del read_dictionary[n] > > > However, I get this error: > RuntimeError: dictionary changed size during iteration > > and I can see why. > > What's the better thing to do?
You can copy the keys into a list: for n in list(read_dictionary): > print(read_dictionary[n]) > if read_dictionary[n] == '5': > del read_dictionary[n] As the list doesn't change size during iteration there'll be no error or skipped key aka list item. If there are only a few items to delete build a list of keys and delete the dict entries in a secend pass: delenda = [k for k, v in read_dictionary.items() if v == "5"] for k in delenda: del read_dictionary[k] If there are many items to delete or you just want to default to the most idiomatic solution put the pairs you want to keep into a new dict: read_dictionary = {k: v for k, v in read_dictionary.items() if v != "5"} _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor