基于第一个整数对列表进行排序

时间:2015-07-20 09:51:01

标签: python sorting csv

我在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

我做错了吗?

1 个答案:

答案 0 :(得分:3)

Python基于第一个元素lexicographicaly对列表进行排序,因为你有字符串,为了获得它,使用一个关键函数来根据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)])