J'ai un dictionnaire imbriqué comme celui-ci:

book={20:{'start':'2008','reason':'sold'},
      21:{'start':'2009','reason':'returned'},
      22:{'start':'2010','reason':'returned'}}

Je souhaite supprimer les articles qui "raison" == "vendus".

La sortie doit être comme ceci:

book={21:{'start':'2009','reason':'returned'},
      22:{'start':'2010','reason':'returned'}}

Voici mon code qui ne fonctionne pas:

for k, v in book:
   if v == 'sold':
       del book[k] 
0
user9831231 23 mai 2018 à 02:10

3 réponses

Meilleure réponse

Cela fait le travail avec quelques trucs de débogage.

booko = book.copy()
for k in book:
   print('k', k)
   if 'reason' in book[k] and book[k]['reason'] == 'sold':
       print(book[k]['reason'])
       del booko[k]
print booko
book=booko

Copie de l'original car sinon l'itérateur ne sait pas quelle est la prochaine étape ...

Le dictionary comprehension est cool, mais super bizarre à grogner. J'aime les boucles pour la maintenabilité. De plus, au fur et à mesure que vous apprenez, vous pouvez exécuter les instructions d'impression pour voir ce qui se passe réellement.

0
Jonathan 23 mai 2018 à 00:14

Essaye ça:

dictionary = {}
book={20:{'start':'2008','reason':'sold'},
      21:{'start':'2009','reason':'returned'},
      22:{'start':'2010','reason':'returned'}}
for d in book:
   if book[d]['reason'] != 'sold':
      dictionary[d] = book[d]
   else:
      pass
print(dictionary)

Production:

{21: {'start': '2009', 'reason': 'returned'}, 22: {'start': '2010', 'reason': 'returned'}}

Je parcourt le dictionnaire du livre et je vérifie si la colonne 'reason' du dictionnaire est 'sold' ou non, si c'est le cas, passe, si ce n'est pas l'ajoute au nouveau dictionnaire

0
U10-Forward 23 mai 2018 à 00:19

Vous pouvez utiliser une compréhension de dictionnaire:

book={20:{'start':'2008','reason':'sold'},
  21:{'start':'2009','reason':'returned'},
  22:{'start':'2010','reason':'returned'}}
new_book = {a:b for a, b in book.items() if b['reason'] != 'sold'}

Production:

{21: {'start': '2009', 'reason': 'returned'}, 22: {'start': '2010', 'reason': 'returned'}}
1
Ajax1234 22 mai 2018 à 23:13