2010-03-17 71 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

相关问题