2015-07-20 169 views
0

我在Python中對列表進行排序時遇到了問題。出於某種原因,它確實將列表排列在最高值上,但在該過程完成之後,該列表中的其他元素不再被排序。基於第一個整數對列表進行排序

我的代碼:

import csv 

id_list = [] 

with open('source/to/file/output.csv', 'rt') as f: 
    reader = csv.reader(f, delimiter=',', quotechar='"') 
    for row in reader: 
     test = "177" 
     if test == row[0]: 
      id_list.append([row[2],row[1]])    

generated_list = id_list[0], id_list[16], id_list[20] 

print(generated_list) 
print(sorted(generated_list)) 

打印的結果是:

-- (['17', '179'], ['5', '2641'], ['9', '3705']) # not sorted 
-- [['17', '179'], ['5', '2641'], ['9', '3705']] # sorted 

我會想到的是,排序方法將輸出:

-- [['17', '179'], ['9', '3705'], ['5', '2641']] # sorted 

我做有問題?

+2

你爲什麼期待? Python是**強類型**,它不會將字符串視爲數字。見例如http://stackoverflow.com/q/4836710/3001761一些替代品。 – jonrsharpe

回答

3

Python的排序將基於第一個元素列表lexicographicaly因爲你的字符串,那GET騎使用一鍵功能進行排序基於int值:

print(sorted(generated_list,key=lambda x:int(x[0]),reverse=True)) 

演示:

>>> sorted(generated_list,key=lambda x:int(x[0]),reverse=True) 
[['17', '179'], ['9', '3705'], ['5', '2641']] 

或者如評論中所述,您可以在排序之前將您的號碼轉換爲整數,也可以將您的行解包以拒絕多重索引:

with open('source/to/file/output.csv', 'rt') as f: 
    reader = csv.reader(f, delimiter=',', quotechar='"') 
    for row in reader: 
     test = "177" 
     row1,row2,row3=row 
     if test == row1: 
      id_list.append([int(row2),row(row1)]) 
+0

哦,那太棒了!非常感謝!這就是訣竅!只要我可以標記你答案,我會做到! – Rotan075

+1

假設OP想要使用該數據,儘管將值永久轉換爲「int」可能會更好。 –

+0

@tobias_k是的,那會更好! – Kasramvd

相關問題