2010-11-08 6 views

Répondre

-1

Je ne connais rien à Python, mais je suppose que vous pouvez parcourir une liste et supprimer les entrées par clé du dictionnaire?

11

[Note: Ceci n'est pas une réponse directe, mais étant donné la spéculation antérieure que la question ressemble à des devoirs. Je voulais apporter une aide qui aidera à résoudre le problème tout en apprenant de lui]

Décomposer votre problème qui est:

  1. Comment obtenir un élément d'une liste
  2. Comment supprimer une clé : valeur dans le dictionnaire

Une aide supplémentaire:

Comment obtenir tous les éléments d'une liste sur python? Pour boucle fonctionne sur toutes les séquences et la liste est une séquence.

for key in sequence: print key 

Comment supprimer un élément dans le dictionnaire?

utilisez la méthode del (clé).

Vous devriez être en mesure de combiner les deux tâches.

+3

Vous n'avez pas répondu à la question.Vous l'avez peut-être dirigé dans la bonne direction, mais tout le monde ne veut pas partir à la recherche de connaissances tout en essayant de faire rapidement quelque chose au travail. – Will

+3

@Will: Je comprends. J'étais l'un des premiers à répondre à cette question. Et de la conversation, il semblait que c'était un problème de devoirs. Chez Stackoverflow, nous dissuadons de répondre à la question à moins que certaines tentatives aient été montrées. Je pensais, j'ai fourni une bonne direction qui le tiendra en bonne place plutôt que de fournir une solution de pâte coupée. J'espère que le contexte aidera. – pyfunc

7
map(dictionary.__delitem__, lst) 
+2

Seulement utile si tout de lst est dans le dictionnaire - sinon vous obtiendrez une KeyError quelque part sur le chemin. Essayez: 'map (dictionnaire .__ delitem__, filter (dictionnaire .__ contains__, lst))' (Bien qu'en vérité, je ne suis pas un grand fan de l'utilisation de 'map' ou liste comps comme des remplacements pour les boucles normales.) – PaulMcG

+0

@ Paul: Je crois que gnibbler voulait que la réponse soit plus ou moins correcte mais surtout inappropriée pour les devoirs ... :) – tzot

+0

Oui, j'ai fait la même chose moi-même sur d'autres questions de devoirs. – PaulMcG

10
for key in list_: 
    if key in dict_: 
     del dict_[key] 
+0

bien, je ne savais pas que vous pourriez le faire. Je pensais que vous deviez utiliser has_key. Merci! btw, del dict_ [k] devrait probablement être del dict_ [clé], n'est-ce pas? – si28719e

+4

@blackkettle: en Python 3 'key in dict_' est en fait le seul moyen de vérifier si un dict a une clé donnée - la méthode' has_key() 'a été supprimée. –

+0

@blackkettle Yup! Oups – rossipedia

1
newdict = dict(
    (key, value) 
    for key, value in olddict.iteritems() 
    if key not in set(list_of_keys) 
) 

plus tard (comme à la fin de 2012):

keys = set(list_of_keys) 
newdict = dict(
    (key, value) 
    for key, value in olddict.iteritems() 
    if key not in keys 
) 

Ou si vous utilisez une compréhension dictionnaire python 2.7+:

keys = set(list_of_keys) 
newdict = { 
    key: value 
    for key, value in olddict.iteritems() 
    if key not in keys 
} 

Ou peut-être même un python 2.7 compréhension du dictionnaire, plus une intersection de jeu sur les touches:

required_keys = set(olddict.keys()) - set(list_of_keys) 
return {key: olddict[key] for key in required_keys} 

Oh oui, le problème aurait pu être que j'avais la condition inversée pour le calcul des clés nécessaires.

+0

Vous devez déplacer 'set (list_of_keys)' en dehors de la boucle –

1
d = {'one':1, 'two':2, 'three':3, 'four':4} 
l = ['zero', 'two', 'four', 'five'] 
for k in frozenset(l) & frozenset(d): 
    del d[k] 
-1
for i in lst: 
    if i in d.keys(): 
     del(d[i]) 
+0

Cela construira une liste ou un itérateur pour 'd.keys()' à chaque étape. Il suffit de faire 'if i in d:' cela sera plus court et plus efficace, et il y a déjà une réponse comme celle-ci. –

Questions connexes