使用文本文件中的信息对列表进行排序

Sort list with information from text file

我一直在从文本文件中读取 class 个对象并将信息存储在列表中。我的问题是:如何按数字顺序对列表进行排序。

文本文件:

Hugo 10
Isac 9
John 90
Kelly 8

代码:

class A:
    def __init__(self,name, age):
        self.name = name
        self.age = age

def sort_list():  
    a = list()        
    file = open('my_textfile.txt', 'r').readlines()       
    for k in file:
        k = k.split(' ')
        af = A(k[0], k[1])
        a.append(af)       
    return a

然后我想对我的列表进行排序,以便两列都按数字排序。像这样:

Kelly 8
Isac 9
Hugo 10
John 90

这是使用您建议的代码的一种解决方案。将数据分成两部分对其进行排序,然后再将其重新组合在一起。 pandas.

还有其他方法可以做到这一点
class A:
    def __init__(self,name, age):
        self.name = name
        self.age = age
def sort_list():  
    a = list()        
    name = list()
    data = list()
    file = open('my_textfile.txt', 'r').readlines()       
    for k in file:
        k = k.split(' ')
        name.append(k[0])
        data.append(k[1])
    name.sort()
    data.sort()
    length = len(name)
    for i in range(length):
        af = A(name[i], data[i])
        a.append(af)
    return a

您现在很可能已经找到了解决方案。如果没有,让我提出一些建议。

首先,我对您的 class 进行了轻微修改:我添加了一个字符串表示形式,使打印件更具可读性:

class A:

    def __repr__(self):
        return f"A('{self.name}', {self.age})"

    def __init__(self, name, age):
        self.name = name
        self.age = age

以下内容不需要!

现在排序:

def sort_list():
    lst = list()
    lines = open('my_textfile.txt', 'r').readlines()
    for line in lines:
        line = line.split()
        lst.append(A(line[0], int(line[1])))
    lst.sort(key=lambda a: (a.age, a.name))
    return lst

除了重命名一些变量外,我还做了以下调整:

  • 我将字符串的第二部分转换为 int,因为我认为这就是您真正想要的 (int(line[1]))。
  • 将所有数据附加到列表后,它得到排序。列表有一个 sort 方法,但在你的情况下你必须给它一些关于如何排序的提示,因为元素是一个新的 class。提示是提供给 sort 的可选 key 参数的 lambda 函数。它 returns 用于列表中的每个元素元组 (a.age, a.name)sort 然后实际上根据这个值排序。由于年龄排在第一位,因此排序看起来是排在第一位的,结果是最终列表中的年龄越来越大。对于年龄相同的条目,排序按姓名的字母顺序进行。

结果

lst = sort_list()
print(lst)

[A('Kelly', 8), A('Isac', 9), A('Hugo', 10), A('John', 90)]