我在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
我做错了吗?
答案 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)])