2013-11-20 97 views
2

好吧,所以我有一个字典的值包含在列表中,这是我一直在寻找...我想知道是否有一种方法来排序这也将显示列表的值单独的列...我已经使用这个代码将值分成不同的列:排序导出为ex​​cel的字典?

 writer = csv.writer(csvfile, delimiter=',') 
     for key, value in finaldict.iteritems(): 
       writer.writerow([key] + value) 

有什么办法可以让这类写作之前的钥匙?任何我似乎都会尝试的事情不会对它进行排序,会产生错误,或者将它更改为单独列的部分打破。因此,如果您不明白我在说什么,例如可以说我有一本字典

finaldict = {'A': [2 , 1], 'C' [3, 3], 'B' [4, 3]}

我在Excel文件中寻找这样的:

Parameter Val1 Val2 
A   2  1 

B   4  3 

C   3  3 

,但目前我得到这个:

Parameter Val1 Val2 
A   2  1 

C   3  3 

B   4  3 

我很感激˚F或答复人谢谢你!

回答

3

其他答案的替代方案(有点清洁,恕我直言):

for key in sorted(finaldict.keys()): 
    writer.writerow([key] + finaldict[key]) 
+0

我同意,我也检查了这一点,它的工作。我结束了使用这两种答案的组合 – seanscal

+0

你可以编写'sorted(finaldict)',它仍然可以工作。 –

+0

@RobertoBonvallet yup,在Python 2.x中放弃创建键列表......(在Python 3中它并不重要),但是yup ...'sort(findaldict)'对于两者都是最好的版本... –

2

使用sorted返回一个包含键和值元组的列表,然后写来代替:

for key, value in sorted(finaldict.iteritems(), key=lambda: L[0]): 
    writer.writerow([key] + value) 
+0

welp ...那很简单...我尝试过在错误的地方排序。还有什么是lambda在这里/这个实例工作在Python 2.7中,因为它提出了一个错误,当我直接尝试这个,但它工作时,我删除了这段代码 – seanscal

+0

@ user2824448啊......是啊......这是一个错字 - 它应该是:'key = lambda L:L [0]' - 它基本上把元组的第一个元素(在这种情况下是键)用作排序键......通过省略它,它将按键排序,然后按值的值排序......(没有什么大不了的,但是要获得比您需要的顺序更多的工作) –

+0

啊好吧,这是有道理的。我想我会用@ kevinsa5的答案去,因为它确实看起来更清洁一点,并且工作得很好,但是谢谢你的回答,并且感谢你解释它背后的逻辑,我仍然得到python的支持,所以我像有解释! – seanscal