总的来说,我正在尝试按信用小时分隔用户名列表。所以我从.txt文件中取出它们并将它们添加到我的初始列表中,但现在我想弄清楚如何检查每行的信用小时数。
stud001 14
stud002 56
stud003 72
到目前为止,我一直试图将信用时数转换为整数,然后直接从那里进行比较,但这对我不起作用。我觉得我在思考它,但我不确定从哪里开始。
编辑:到目前为止,我一直在尝试的是这个(我尝试了几个变化):
for x in lis:
lis = eval(x[-2:])
答案 0 :(得分:3)
您可以尝试使用lists of lists
这样做:
with open('file.txt','r') as f: #Replace 'file.txt' with your textfile
lis=[]
for line in f:
lis.append(line.split())
这将创建一个列表列表,其格式为:
[['stud001', '14'], ['stud002', '56'], ['stud003', '72']]
您现在可以迭代并比较学分。
例如(访问第一个学分及其相关学号):
>>> lis[0][1]
14
>>> lis[0][0]
stud001
此外,如果数据是无序的:
stud001 72 #switched 72 and 14
stud002 56
stud003 14
您可以添加以下代码行,根据信用小时数对list of lists
进行排序:
lis.sort(key=lambda x: x[1])
这会将列表lis
按最低到最高信用小时排序:
>>> lis
[['stud003', '14'], ['stud002', '56'], ['stud001', '72']]
答案 1 :(得分:0)
my_file.txt:
stud001 14
stud002 56
stud003 72
代码:
>>> with open('test5.txt', 'r') as f:
... data = {}
... for line in f:
... line = line.strip().split()
... data[line[0]] = int(line[1])
...
>>> for key in sorted(data):
... print(key, data.get(key))
...
stud001 14
stud002 56
stud003 72
这可以更简洁地表达出来:
>>> with open('test5.txt', 'r') as f:
... data = {line.strip().split()[0]:int(line.strip().split()[1]) for line in f}
...
>>> print(*(' '.join((k, str(data.get(k)))) for k in sorted(data)), sep='\n')
stud001 14
stud002 56
stud003 72
这会创建一个字典data
,其中包含"stud001"
之类的键和14
之类的值。然后它在一个单独的行上打印每个条目,按字母顺序按键排序,键和值用空格分隔。