Comment modifier un dictionnaire en python tout en le parcourant

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
Posted Tuesday, July 10th, 2012 under Linux world, Tips&Tricks.

Leave a Reply