[英]Sort list with information from text file
我一直在从文本文件中读取类对象并将信息存储在列表中。 我的问题是:如何按数字顺序对列表进行排序。
文本文件:
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
这是使用您建议的代码的一种解决方案。 将数据分成两部分进行排序,然后再将其重新组合在一起。 还有其他方法可以用熊猫来做到这一点。
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 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
方法,但在你的情况下,你必须给它一些关于如何排序的提示,因为元素是一个新类。 提示是给sort
的可选key
参数的 lambda 函数。 它为列表的每个元素返回元组(a.age, a.name)
。 sort
然后实际上根据这个值进行排序。 由于年龄是第一个,排序首先看起来是它,结果是最终列表中的年龄增加。 对于年龄相同的条目,按名称的字母顺序进行排序。的结果
lst = sort_list()
print(lst)
是
[A('Kelly', 8), A('Isac', 9), A('Hugo', 10), A('John', 90)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.