我是一个字典,其中字符串元组为键,数组为值:
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
我想在写入文件之前根据第一个数字“列”对其进行排序(或之后只是重写?)所以输出应该是这样的:
B,B,12621,1
A,B,1235,13
A,A,1234,123
A,C,12,12
^
Sorted on this 'column'
我该怎么做?该文件非常大,所以我想在写之前这样做会更好。
答案 0 :(得分:4)
对字典项进行排序; sorted()
function使用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
module可供您使用:
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])
并且您不必将整数显式转换为字符串。
答案 1 :(得分:1)
使用sorted()
function内置函数并指定要排序的键:
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):