[英]Sort a dictionary of arrays in python with a tuple as the key
我是一個以字符串元組為鍵和值作為數組的字典:
some_dict = {}
some_dict[(A,A)] = [1234, 123]
some_dict[(A,B)] = [1235, 13]
some_dict[(A,C)] = [12, 12]
some_dict[(B,B)] = [12621, 1]
...
我正在將此寫入csv文件:
for k,v in some_dict.iteritems():
outf.write(k[0]+","+k[1]+","+str(v[0])+","str(v[1])+"\n")
輸出:
A,A,1234,123
A,B,1235,13
A,C,12,12
B,B,12621,1
我想在寫入文件之前(或之后再重寫?)基於第一個數字“ column”對它進行排序,因此輸出應為:
B,B,12621,1
A,B,1235,13
A,A,1234,123
A,C,12,12
^
Sorted on this 'column'
我該怎么做呢? 該文件非常大,因此我認為在寫入之前進行操作會更好。
對字典項進行排序; sorted()
函數采用一個key
函數來確定要排序的內容; 對於(key, value)
元組,請使用lambda:
sorted_data = sorted(some_dict.iteritems(), key=lambda i: i[1][0], reverse=True)
for (k1, k2), (v1, v2) in sorted_data:
我使用reverse=True
首先具有更大的值。
嘗試避免重新發明輪子,這里有一個出色的csv
模塊可供您使用:
import csv
with open(filename, 'wb') as f:
writer = csv.writer(f)
for (k1, k2), (v1, v2) in sorted(some_dict.iteritems(), key=lambda i: i[1][0]):
writer.writerow([k1, k2, v1, v2])
而且您也不必將整數顯式轉換為字符串。
利用內置的sorted()
函數並指定用於排序的鍵:
for k,v in sorted(some_dict.iteritems(), key=lambda t: t[1][0]):
print k,v
#output:
(A, C) [12, 12]
(A, A) [1234, 123]
(A, B) [1235, 13]
(B, B) [12621, 1]
要從大到小排序,只需設置reverse
關鍵字參數:
for k,v in sorted(some_dict.iteritems(), key=lambda t: t[1][0], reverse=True):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.