Quelle est la meilleure façon de supprimer un article de dictionnaire en valeur en python?
Je me demande si il est simple moyen de supprimer un ou plus dictionnaire élément(s) à partir d'un dictionnaire python en valeur.
Nous avons un dictionnaire appelé myDict
:
myDict = {1:"egg", "Answer":42, 8:14, "foo":42}
et souhaitez supprimer tous les éléments qui valeurs sont égales à 42
.
Mise en œuvre suggestion:
- Obtenir une liste de toutes les clés d'une certaine valeur dans
myDict
(Voir, par exemple,obtenir la clé en valeur dans le dictionnaire.) - Supprimer ce dict l'élément ou les éléments (basé sur l'trouvent les clés) à partir de
myDict
(Pour plus d'informations, voir Supprimer un élément d'un dictionnaire.)
Alors, que pensez-vous maintenant, c'est le plus élégant et plus “pythonic” façon de mettre en œuvre ce problème en Python?
Le désir "d'Obtenir le premier ... la clé d'une valeur dans myDict" est un peu douteux, @elegent, comme la notion de premier ne s'applique pas à des dictionnaires.
Oui, vous avez absolument raison! Merci beaucoup pour le tuyau. J'ai mis à jour la question 🙂
Oui, vous avez absolument raison! Merci beaucoup pour le tuyau. J'ai mis à jour la question 🙂
OriginalL'auteur elegent | 2015-03-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un simple
dict
compréhension:En tant que tel:
item, key
et le nom de ilkey, val
au lieu et à l'utilisationval != 42
parce que c'est plus sémantiquement correct.Merci pour votre réponse! Un
dict
-de la compréhension est une belle idée, mais à mon avis, la question était de savoir comment supprimer des éléments forme un dict. Je sais que nous avons seulement besoin d'assigner la résultante dict de la compréhension demyDict
:myDict = {key:val for key, val in myDict.items() if val != 42}
, donc si il est commode pour vous s'il vous plaît changer votre réponse.changé 🙂
OriginalL'auteur A.J. Uppal
Vous devez créer une copie d'itérer sur que la modification de la taille du dictionnaire à l'intérieur d'une boucle provoque un RunTimeError. Itérer sur la clé, des paires de valeur dans votre dictionnaire de copie à l'aide des éléments de() et de les comparer chaque valeur à la valeur que vous recherchez. Si elles correspondent, supprimez la clé du dictionnaire.
L'ajout de réponse à la question dans les commentaires ci-dessous car il était trop gros pour un commentaire. Voici une rapide session de console montrant que
mydict.copy()
etdict(myDict)
accomplir la même chose.myDict.copy()
est plus efficaceJe suis d'accord. Merci pour cette remarque. Ce serait également le travail et d'éliminer la ligne supplémentaire de la création d'une copie avant la boucle:
for key, value in dict(myDict).items():
Merci beaucoup pour votre réponse! Peut-être que vous pouvez modifier votre réponse en fonction de votre commande.
Content d'avoir pu aider. Je vais modifier la réponse pour refléter les modifications.
Quelle est la differnce entre
myDict.copy()
etdict(myDict)
?OriginalL'auteur cruane
J'aime à la suite d'une "liste noire" approche où vous itérer dans le dictionnaire, puis ajouter ceux que vous souhaitez supprimer de la liste, puis, après une itération, supprimer les entrées de cette liste comme suit:
liste =[]
pour dictEntry: si le test de la condition, de la liste de résultats.ajouter
pour l'entrée dans la liste de résultats:
supprimer dict[entrée]
c'est juste quelques pseudo-code, mais j'ai été un succès dans le passé
OriginalL'auteur NevDev
Vous pouvez effectuer une itération sur une copie et d'effectuer une recherche:
Ou seulement copier les clés:
Qui, si vous voulez la mutation de l'original dict devrait être la plus efficace.
reversed()
pour inverser la liste des clés? Les éléments (par exemple, les paires clé-valeur) ne sont pas classés dans un dict, par conséquent, modification de l'ordre est une étape inutile à mon avis.essayez de le faire sans inverser et, vous verrez
... que ça marche! 🙂 BTW, vous n'avez pas besoin de 3 parenthèse fermante...
yep une faute de frappe. Oui effectivement liste(dict) va travailler pour python2 et 3
Ok pas de problème, je vous remercie pour votre réponse. J'étais juste un peu confus. 🙂
OriginalL'auteur Padraic Cunningham
Utiliser un dictionnaire, la compréhension.
si vous avez besoin d'une copie de l'utilisation
iteritems()
si vous n'avez pas besoin d'une copie de votre dictionnaire, vous pouvez utiliser
viewitems()
Merci! En Python 3.x nous utilisons uniquement des
.items()
au lieu de.iteritems()
etviewitems()
?oui il y a des différences dans python 3.x et 2.x cependant, votre question n'est pas identifié avec une version de python donc, je suppose que vous cherchiez un 2.x solution.
Oui, désolé, vous avez raison. Si il est commode pour vous, vous pouvez ajouter ces informations supplémentaires pour votre réponse, donc on peut voir la différence entre les deux versions de Python. 🙂
OriginalL'auteur kasper Taeymans