繁体   English   中英

用于对逗号分隔数列表进行排序的Pythonic方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM