2010-03-17 3 views
5

Допустим, у меня есть список:Получить словарные значения для каждого ключа в списке

a = ['apple', 'carrot'] 

и словарь:

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

Как я могу использовать список в качестве ключа искать в словаре d? Я хочу, чтобы результат должен быть записан в разделенных запятыми текстовый файл, как этот

apple, carrot 
2,  44 
4,  33 

скорректированным а-список из = [ «яблоко», «оранжевой»] к = [ «яблоко», «морковь»]

+0

Это домашнее задание? –

+0

Нет, это упрощенная версия проблемы, которую я пытаюсь решить ... Яблоки и морковь просто иллюстрируют проблему. – user265978

+1

Ваше имя неверное. Насколько я понимаю, вы хотите получить значения словаря для каждого ключа в списке, правильно? – dbemerlin

ответ

3

Я знаю других людей, которые были быстрее, и их решения похожи, но вот мое взятие (взять его или оставить его):

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() 

, который генерирует файл 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)) 

Выход:

apple, orange 
2,  345 
4,  667 
+0

Что делает * в zip-выражении ? – user265978

+0

Спасибо. Сегодня я чему-то научился. williamx - проверьте http://docs.python.org/library/functions.html#zip – Mark

+0

@williamx * делает так, чтобы значения передавались как отдельные аргументы в zip(), а не передавались один аргумент, содержащий все от значений. Это описано здесь: http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists –

1

Вопрос очень старый, но и для будущих посетителей, я предложил бы использовать list comprehensions, чтобы получить значения Словаря д для ключей к в перечне a:

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

Это, по сути, тот самый высокий рейтинг, который дал @DanielStutzbach. Вместо понимания списка используется выражение генератора, но в этом контексте очень мало различий. – Blckknght

Смежные вопросы