2016-12-02 91 views
0

以下功能採用格式化等級類型,等級類型編號,等級的csv文件。前10個例子是作業,作業編號,等級。該函數將這些前10列入列表。更改CSV文件以更改打印訂單或數據

此刻它在打印順序assigment,assigment number,grade,但我試圖按照等級,assigment,assigment號碼的順序打印它。

def assigment(file): 
    res = [] 
    f = open(file,'r+') 
    reader = csv.reader(f) 
    for i, line in enumerate(reader): 
     if i < 10: 
     res.append((line[0],int(line[1]),int(line[2]))) 

     res.sort(key= lambda x: x[2]) 

    max = res[-1] 
    min = res[0] 

    print max 
    print min 
+0

對於它的價值,'key = lambda x:x [2]'可以用'operator.itemgetter(2)'代替。另外'對於我,在列舉行(讀者):如果我<10:'用於行itertools.islice(讀者,10):'。 –

+0

如果你只使用前10行,你爲什麼要迭代整個CVS?當'i'達到10時'break'。另外,爲什麼在每個'append'之後對'res'進行排序,爲什麼不在最後一次呢? –

回答

0

在輸出數據中有兩種排序。一個是每行中的項目順序,另一個是行的順序。

每一行中的項目的順序由線

res.append((. . .

控制要修改此順序,只是改變這一行的子表達式的順序。

要修改行的順序,一個非常好的方法是重複排序。先按最不重要的標準排序,然後按最重要的標準排序。

如果要按每行的元素0進行排序,通過元素1的值打破關係,並通過元素2的值打破任何剩餘關係,則在代碼中有三行排序,而不僅僅是1行例如:

res.sort(key= lambda x: x[2]) 
res.sort(key= lambda x: x[1]) 
res.sort(key= lambda x: x[0]) 

或一些等同物。 Python排序是「穩定的」,因此,例如,如果最終排序的鍵相同,則最後的排序步驟會保留現有的排序。

+0

爲什麼要這樣分三次,而不是一次使用多值(元組)鍵? –

+0

@Cristian元組鍵可能是更復雜的方法。在我看來,爲了獲得最佳性能,您希望將密鑰添加到數據集中的每個記錄,然後進行排序,然後只提取所需的數據。這似乎更容易解釋,而且在Terr的情況下表現似乎是一個關鍵目標似乎令人懷疑。 –