2012-06-15 23 views
7

Tengo un diccionario que tiene claves asociadas con las listas.Acceso a los elementos en listas dentro del diccionario python

mydict = {'fruits': ['banana', 'apple', 'orange'], 
     'vegetables': ['pepper', 'carrot'], 
     'cheese': ['swiss', 'cheddar', 'brie']} 

Lo que quiero hacer es utilizar una sentencia if que si la búsqueda para el artículo y está en ninguna de las listas en el diccionario devolverá la llave. Esto es lo que estaba tratando:

item = cheddar 
if item in mydict.values(): 
    print key 

pero no hace nada, la salida debe ser:

cheese 

Esto parece una cosa simple, pero simplemente no puede resolverlo. Cualquier ayuda es asombrosa

Respuesta

7

Vas a tener que utilizar un for, un simple if no es suficiente para comprobar un conjunto indeterminado de listas:

for key in mydict.keys(): 
    if item in mydict[key]: 
     print key 

Un enfoque sin una declaración explícita for sería posible así:

foundItems = (key for key, vals in mydict.items() if item in vals) 

que devuelve todas las claves que están asociadas con item. Pero internamente, todavía hay algún tipo de iteración pasando.

+0

¿Qué pasa si quiero "acceder" a la lista asociada con cada clave, y convertirla en 'temp_array' dentro del ciclo for, para mis propios cálculos? Digamos que tengo que verificar algo con respecto a los valores de la lista. En mi caso, las listas solo contendrán números enteros. – FaCoffee

+1

@FrancescoCastellani depende de su caso de uso real; solo podría acceder a 'mydict [clave]' en cualquier iteración, como en el primer fragmento; o puede hacer algo como 'map (mydict.values ​​(), own_calculations)'. – phg

2
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 
if item in mydict['cheese']: 
    print ("true") 

esto funciona, pero hay que hacer referencia a las teclas en el diccionario como el queso, verduras, etc lugar, debido a la forma en que hizo el diccionario, espero que esto ayude!

1
mydict = {'fruits': ['banana', 'apple', 'orange'], 
    'vegetables': ['pepper', 'carrot'], 
    'cheese': ['swiss', 'cheddar', 'brie']} 

item = "cheddar" 

for key, values in mydict.iteritems(): 
    if item in values: 
     print key 

Si se va a hacer una gran cantidad de este tipo de búsqueda, creo que se puede crear un índice inverso para el original mydict para acelerar la consulta:

reverse_index = {} 

for k, values in mydict.iteritems(): 
    for v in values: 
     reverse_index[v] = k 

print reverse_index.get("cheddar") 
print reverse_index.get("banana") 

De esta manera usted don' t tiene que atravesar la lista values cada vez para encontrar un artículo.

Cuestiones relacionadas