Comment modifier un dictionnaire en python tout en le parcourant

Comment modifier un dictionnaire en python tout en le parcourant
Photo by Artturi Jalli / Unsplash

Voilà une astuce pour modifier un dictionnaire en le parcourant. Si vous essayiez de le faire de la manière “naïve” vous obtiendrez l’erreur suivante :

example = { 'k1' : 'v1', 'k2, : 'v2' , ... }
for (k,v) in example.iteritems():
if k == 'k2':
del example[k]
RuntimeError: dictionary changed size during iteration

Python n’aime pas ça du tout, si vous le faites avec la méthode items() en revanche, aucune erreurs ne sera relevée var celle-ci renvoie une copy du dictionnaire si bien que la modification n’y est pas répercuté. Et si comme moi vous êtes en version 2.6 qui ne dispose pas des nouvelles méthodes viewitems(), viewkeys() et viewvalues() permettant la consultation d’un dictionnaire dynamique, il faudra passer par l’astuce suivante :

example = { 'k1' : 'v1', 'k2, : 'v2' , ... }
for (k,v) in list(example.iteritems()):
if k == 'k2':
del example[k]
RuntimeError: dictionary changed size during iteration