[英]Pythonic Way to Sort a List of Comma Separated Numbers
样本输入
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', ]
我目前正在尝试将其转换为键值对列表,但我不确定这是正确的方向。
最简单的方法是将对解析成列表,然后对它们进行排序:
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)
import sys
with open(sys.argv[1]) as f:
lin = sorted([[int(j) for j in i.split(",")] for i in f])
print lin
您可以使用键功能将行排序为字符串
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”上的前导零,因此将结果保留为字符串可能更可取
为什么不只是使用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
完全按照这里的要求进行:它使用列表的自然排序顺序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.