2010-11-08 27 views

Respuesta

-1

No sé nada sobre Python, pero supongo que puede recorrer una lista y eliminar las entradas por clave del diccionario?

11

[Nota: Esta no es una respuesta directa, pero se da la especulación anterior de que la pregunta parece una tarea. Yo quería proporcionar ayuda que ayudará a resolver el problema, mientras que aprender de ella]

Descomponer el problema que es:

  1. cómo conseguir un elemento de una lista
  2. Cómo eliminar una clave : valor en el diccionario de

Más ayuda:

¿Cómo obtener todos los elementos de una lista en python?

Para el bucle funciona en todas las secuencias y la lista es una secuencia.

for key in sequence: print key 

¿Cómo se elimina un elemento en el diccionario?

utilice el método del (clave).

Usted debe ser capaz de combinar las dos tareas.

+3

No respondió la pregunta.Puede haberlo señalado en la dirección correcta, pero no todos quieren buscar conocimiento mientras intentan hacer algo rápidamente en el trabajo. – Will

+3

@Will: lo entiendo. Fui uno de los primeros en responder esta pregunta. Y de la conversación, parecía que este era un problema de tarea. En Stackoverflow, disuadimos de responder la pregunta a menos que se hayan mostrado algunos intentos. Pensé que había proporcionado una buena dirección que lo mantendría en una buena posición en lugar de proporcionar una solución de cortar y pegar. Espero que el contexto ayude. – pyfunc

7
map(dictionary.__delitem__, lst) 
+2

Solo es útil si todo el lst está en el diccionario; de lo contrario, obtendrás un KeyError en algún punto del camino. Pruebe: 'map (dictionary .__ delitem__, filter (dictionary .__ contains__, lst))' (Aunque, en verdad, no soy un gran fan de usar 'map' o list comps como suplentes para loops normales) – PaulMcG

+0

@ Paul: Creo que Gnibbler pensó que la respuesta era más o menos correcta, pero en su mayor parte inapropiada para la tarea ... :) – tzot

+0

Sí, he hecho lo mismo con otras preguntas sobre la tarea. – PaulMcG

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

bueno, no sabía que pudieras hacer esto. pensé que tenías que usar has_key. ¡Gracias! Por cierto, del dict_ [k] probablemente debería ser del dict_ [clave], ¿verdad? – si28719e

+4

@blackkettle: en Python 3 'key in dict_' es en realidad la única forma de comprobar si un dict tiene alguna clave determinada - se ha eliminado el método' has_key() '. –

+0

@blackkettle ¡Sip! Oops – rossipedia

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

tarde (como a finales de 2012):

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

O si utiliza un diccionario 2.7+ pitón comprensión:

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

O tal vez incluso una pitón 2.7 diccionario comprensión más una intersección de conjuntos en las teclas:

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

Oh sí, el problema podría muy bien haber sido que tenía la condición invertido para calcular las claves necesarias.

+0

Debe mover 'set (list_of_keys)' fuera del ciclo –

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

Esto construirá una lista o un iterador para 'd.keys()' en cada paso. Solo necesita hacer 'si yo en d:' esta será la forma más corta y eficiente de hacerlo, y ya existe la respuesta de esta manera. –

Cuestiones relacionadas