2010-03-17 93 views
5

比方說,我有一個列表:獲取列表中的每一個鍵的字典值

a = ['apple', 'carrot'] 

和字典:

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

如何使用列表一個作爲重點在字典中查找d?我想要的結果將被寫入以逗號分隔的文本文件這樣

apple, carrot 
2,  44 
4,  33 

從= [「蘋果」,「桔子」]爲a = [「蘋果」修正了一個列表, 「胡蘿蔔」]

+0

這功課嗎? – 2010-03-17 14:51:42

+0

不,這是我試圖解決的問題的簡化版本......蘋果和胡蘿蔔只是爲了說明問題。 – user265978 2010-03-17 14:53:04

+1

您的標題有誤導性。據我所知,你想獲得列表中每個鍵的字典值,對嗎? – dbemerlin 2010-03-17 14:58:06

回答

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 2010-03-17 15:30:34

+0

謝謝。我今天學到了東西。 williamx - check out http://docs.python.org/library/functions.html#zip – Mark 2010-03-17 15:37:20

+0

@williamx *使它成爲獨立參數傳遞給zip(),而不是傳遞一個包含所有參數的參數的價值。它的記錄在這裏:http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists – 2010-03-17 16:30:04

1

問題已經很老了,但是爲了將來的遊客我建議使用list comprehensions拿到字典d的值鍵ķ在列表中a

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

這實際上是@DanielStutzbach所做的最高評分答案。它不是列表理解,而是使用生成器表達式,但在這種情況下幾乎沒有什麼區別。 – Blckknght 2012-11-22 07:08:41

相關問題