示例输入
20, 71146620
100, 26867616
10, 02513583
10, 52811698
100, 23859051
我从文件中读取它作为带有
的列表的命令行参数lin = [i.strip() for i in open(sys.argv[1]).readlines()]
该列表看起来像['20, 71146620', '100, 26867616', '10, 02513583', '10, 52811698', '100, 23859051']
我的希望是找到排序这个列表的最pythonic方式,首先是第一个值,然后是第二个值,它看起来像:
['10, 02513583', '10, 52811698', '20, 71146620', '100, 23859051', '100, 26867616', ]
我目前正在尝试将其转换为键值对列表,但我不确定这是正确的方向。
答案 0 :(得分:4)
最简单的方法是将对解析成列表,然后对它们进行排序:
lin = [i.strip().split(', ') for i in open(sys.argv[1]).readlines()]
lin = sorted(lin)
如果您想以数字方式排序,只需转换为数字:
lin = [map(int, i.strip().split(', ')) for i in open(sys.argv[1]).readlines()]
lin = sorted(lin)
答案 1 :(得分:1)
import sys
with open(sys.argv[1]) as f:
lin = sorted([[int(j) for j in i.split(",")] for i in f])
print lin
答案 2 :(得分:1)
您可以使用键功能
将行排序为字符串def two_ints(s):
return map(int, s.split(","))
with open("num.txt") as f:
for line in sorted(f, key=two_ints):
print line
这取决于您是希望结果是字符串列表还是整数列表列表。
转换为int后,无法恢复“02513583”的前导零,因此将结果保留为字符串可能更合适
答案 3 :(得分:0)
为什么不仅仅使用csv模块并对其进行排序(使用字符串到整数的转换)
import csv
with open("test.csv") as f:
cr = csv.reader(f)
result = sorted(list(map(int,row)) for row in cr)
结果:
>>> result
[[10, 2513583],
[10, 52811698],
[20, 71146620],
[100, 23859051],
[100, 26867616]]
sort
完全按照此处的要求进行操作:它使用列表的自然排序顺序