Python从文件读取行并按行降序排序

时间:2017-01-14 18:32:26

标签: python sorting dictionary

所以我把这个文本文件看起来像这样:

 PID     TTY              TIME          CMD
1000    pts/2           00:00:00        aash
9000    pts/2           00:00:00        bash
3000    pts/2           00:00:00        cash

我想要最终得到的是某种字典,我保存|(PID,CMD)|按PID递减排序。

所以它看起来像这样:

[(9000,bash的),(3000,现金),(1000,aash)]

任何想法? 这就是我读取文件并保存在字典中的方式。

dict = {}

with open('newfile.txt') as f:
     next(f)   #skipping first line
     for line in f:
        result[line.split()[3]] = int(line.split()[0])

感谢任何帮助!提前谢谢!

2 个答案:

答案 0 :(得分:1)

所以这就是解决方案:

import collections

result = {}

with open('newfile.txt') as f:
    next(f)
    for line in f:
        result[line.split()[3]] = int(line.split()[0])

print(collections.OrderedDict(sorted(result.items(), key=lambda t: t[1])))

这是打印出来的:

OrderedDict([('aash', 1000), ('cash', 3000), ('bash', 9000)])])

答案 1 :(得分:1)

如果您需要以列表结束,那么最好是将数据读入列表然后对其进行排序,具体方法如下:

lst = []
with open('newfile.txt') as f:
    next(f)
    for line in f:
        if line.split() != '':  # watch out for empty lines
            a, b, c, d = line.split()
            lst.append((int(a), d))

lst = sorted(lst)
print(lst)

====
[(1000, 'aash'), (3000, 'cash'), (9000, 'bash')]

sorted()按元组的第一项排序,因此您可以以基本形式使用它。

如果你需要的是一个字符,其中键被排序,那么你可以使用OrderedDict,只需导入它并在代码中添加另一行:

from collections import OrderedDict

然后

d = OrderedDict(lst)
print(d)

结果如下:

OrderedDict([(1000, 'aash'), (3000, 'cash'), (9000, 'bash')])