检查字符串中的int值

时间:2015-04-07 18:37:25

标签: python

总的来说,我正在尝试按信用小时分隔用户名列表。所以我从.txt文件中取出它们并将它们添加到我的初始列表中,但现在我想弄清楚如何检查每行的信用小时数。

stud001 14
stud002 56
stud003 72

到目前为止,我一直试图将信用时数转换为整数,然后直接从那里进行比较,但这对我不起作用。我觉得我在思考它,但我不确定从哪里开始。

编辑:到目前为止,我一直在尝试的是这个(我尝试了几个变化):

for x in lis:
    lis = eval(x[-2:])

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之类的值。然后它在一个单独的行上打印每个条目,按字母顺序按键排序,键和值用空格分隔。