2010-03-17 12 views
5

Digamos que tengo una lista:obtener los valores del diccionario para cada clave en una lista

a = ['apple', 'carrot'] 

y un diccionario:

d ={'apple': [2,4], 'carrot': [44,33], 'orange': [345,667]} 

¿Cómo puedo usar la lista un como clave buscar en el diccionario d? Quiero que el resultado se escriba en un archivo de texto separado por comas como esto

apple, carrot 
2,  44 
4,  33 

ha corregido la una lista de a = [ 'manzana', 'naranja'] aa = [ 'manzana', 'zanahoria']

+0

¿Es esta tarea? –

+0

No, es una versión simplificada de un problema que estoy tratando de resolver ... Las manzanas y las zanahorias son solo para ilustrar el problema. – user265978

+1

Su título es engañoso. Por lo que yo entiendo, quieres obtener los valores del diccionario para cada tecla en una lista, ¿correcto? – dbemerlin

Respuesta

3

sé que otras personas han sido más rápido y sus soluciones son similares, pero aquí está mi opinión (tomarlo o dejarlo):

a = ['apple', 'orange'] 

d ={'apple': [2,4], 'carrot': [44,33], 'orange': [345,667]} 

fo = open('test.csv','w') 
fo.write(',\t'.join(a)+'\n') 
for y in xrange(len(d[a[0]])): 
    fo.write(',\t'.join([str(d[i][y]) for i in a])+'\n') 

fo.close() 

que genera el archivo test.csv:

apple, orange 
2,  345 
4,  667 
8
a = ['apple', 'orange'] 
d ={'apple': [2,4], 'carrot': [44,33], 'orange': [345,667]} 

print ',\t'.join(a) 
for row in zip(*(d[key] for key in a)): 
    print ',\t'.join(map(str, row)) 

salida:

apple, orange 
2,  345 
4,  667 
+0

¿Qué significa * en la expresión zip? ? – user265978

+0

Gracias. Aprendí algo hoy. williamx - echa un vistazo a http://docs.python.org/library/functions.html#zip – Mark

+0

@williamx El * lo hace para que los valores se pasen como argumentos separados a zip(), en lugar de pasar un argumento que contenga todo de los valores. Está documentado aquí: http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists –

1

pregunta es muy antigua, pero para los futuros visitantes me gustaría sugerir el uso de list comprehensions para obtener valores de dict d para las llaves k en la lista a:

values = [ d[k] for k in a ] 
+0

Esto es esencialmente lo que ya hace la respuesta mejor calificada por @DanielStutzbach. En lugar de una lista de comprensión, utiliza una expresión de generador, pero hay muy poca diferencia en este contexto. – Blckknght

Cuestiones relacionadas