J'ai un dictionnaire en Python pour lequel je veux supprimer toutes les clés qui ont une valeur d'exactement 0. C'est un gros dictionnaire donc je ne peux pas le copier ici, mais disons que c'est mon dictionnaire:
grades = {Andrew: 0.01, Eric: 0.02}
3 Réponses :
Utilisez une compréhension de dict:
for k, v in grades.copy().items():
if v == 0:
del grades[k]
ou un filtre
non_zeros = dict(filter(lambda kv: kv[1] != 0, grades.items()))
ou del
grades = {mark: 0, Andrew: 0.01, Alex: 0, Sam: 0, Eric: 0.02}
non_zeros = {k: v for k, v in grades.items() if v != 0}
il peut, mais à mon humble avis, il ne devrait pas. Nous n'avons pas de spécifications et cela, comme vous le savez, filtrerait également d'autres fausses choses comme par exemple. Aucun
La dernière option ne fonctionnera pas, on ne supprime pas simplement d'un dict tout en l'itérant.
Comme @ted l'a dit, vous pouvez utiliser la compréhension de dict, qui est probablement la solution la meilleure et la plus compacte. Voici une autre façon d'utiliser de base pour chaque itération:
keys = grades.keys() # Get a list of all the keys
for key in keys:
if grades[key] == 0: # If the value is 0...
my_dict.pop(key, None) # Remove the key from the dictionary
Cela augmentera RuntimeError: le dictionnaire a changé la taille pendant l'itération .
Vous pouvez utiliser une compréhension dict :
grades = {Andrew: 0.01, Eric: 0.02}
Sortie:
grades = {mark: 0, Andrew: 0.01, Alex: 0, Sam: 0, Eric: 0.02}
grades = {k:grades[k] for k in grades if grades[k]}
print(grades)