2013-11-20 54 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