1
votes

Suppression de toutes les clés d'un dictionnaire pour lesquelles leur valeur est 0

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}


0 commentaires

3 Réponses :


6
votes

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}


2 commentaires

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.



1
votes

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


1 commentaires

Cela augmentera RuntimeError: le dictionnaire a changé la taille pendant l'itération .



2
votes

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)


0 commentaires