Supprimer valeur dict avec boucle for python
Résolu/Fermé- Supprimer valeur dict avec boucle for python
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Supprimer pub youtube - Accueil - Streaming
- Impossible de supprimer un fichier - Guide
- Supprimer liste déroulante excel - Guide
2 réponses
dictionnaire[i].pop(j)
Quelle est la nature de dictionnaire[i]? Une liste? Un dictionnaire?
Et si tu faisais un del() ? Ça ne marcherais pas plus.
On ne peut pas modifier un dictionnaire pendant qu'on le parcours.
On peut regénérer le sous-dictionnaire avec une compréhension:
dictionnaire[i] = {k: v for k, v in dictionnaire[i].items() if len(v) >= 2}
Modifié le 12 déc. 2022 à 15:36
Bonjour
On ne peut pas modifier un dictionnaire pendant qu'on le parcours.
Pour être plus exact, on ne peut pas supprimer ou créer une clé présente dans un dict (ou dans un set). Mais, lorssqu'on itère sur un dictionnaire, il reste possible de modifier la valeur associée à une clé.
Comment supprimer un ensemble de clés
Il y a deux manières de procéder :
- Soit on recrée le dictionnaire filtré "from scratch" (on peut par exemple utiliser une compréhension comme le propose Pierrot le fou #1)
- Soit on se débrouille pour que la boucle n'itère pas sur le dictionnaire que l'on modifie, mais par exemple un ensemble préalable construit de clés à supprimer.
La deuxième méthode est plus élégante car dans le pire des cas on construit en mémoire un ensemble dont la taille est celle des clés, alors que pour la première on construit dans le pire ds cas en mémoire deux fois le dictionnaire dans sa totalité.
Exemple
# Create a dummy dict d = { chr(i) : i for i in range(97, 107) } print(f"d = {d}") # Define keys to remove bad_keys = { k for (k, v) in d.items() if v % 2 == 0 } print(f"bad_keys = {bad_keys}") # Remove each bad key for k in bad_keys: del d[k] print(f"d = {d}")
Résultat :
d = {'a': 97, 'b': 98, 'c': 99, 'd': 100, 'e': 101, 'f': 102, 'g': 103, 'h': 104, 'i': 105, 'j': 106} bad_keys = {'j', 'f', 'b', 'd', 'h'} d = {'a': 97, 'c': 99, 'e': 101, 'g': 103, 'i': 105}
Version raccourcie :
# Create a dummy dict d = { chr(i) : i for i in range(97, 107) } print(f"d = {d}") # Remove some key / value pairs for k in { k for (k, v) in d.items() if v % 2 == 0 }: del d[k] print(f"d = {d}")
Bonne chance
10 déc. 2022 à 16:29
Merci beaucoup.