簡體   English   中英

使用元組作為鍵對python中的數組字典進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM