我有下面的代码,并希望返回的主题,对于任何给定的老师的最有效的方法:与由分隔符分隔的两个值的列表,访问在第二列第二场
注:列表alldata包含格式的数据:
['Mr Moose : Maths', 'Mr Goose: History', 'Mrs Marvin: Computing']
其中'Mr Moose:Maths'是列表中的第一个元素。 我希望得到的数学和历史和计算,对于搜索对于任何给定的老师。
代码
#Search for a teacher, and return the subject they teach
"""File contents
Mr Moose : Maths
Mr Goose: History
Mrs Cook: English
"""
alldata=[]
col_num=0
teacher_names=[]
delimiter=":"
def main():
with open("teacherbook.txt") as f:
for line in f.readlines():
alldata.append((line.strip()))
print(alldata)
print()
print()
for x in alldata:
teacher_names.append(x.split(delimiter)[col_num].strip())
teacher=input("Enter teacher you are looking for:")
if teacher in teacher_names:
print("..and the subject they teach is:",teacher_names[2])
else:
print("No")
main()
我很想知道,如果这个代码可以只通过增加一个简单的线条来在那里我有teacher_names [2]和/或任何解决方案,更优雅固定,即显示了如何直接搜索一个文件给定的名称(如驼鹿先生)并返回下一个场(在这种情况下,数学)。这里的过程看起来很艰难,而不是使用csv处理的过程。
是列表中唯一的每个元素的第一个元素?如果是这样,为什么不把它们解析成字典呢? – MooingRawr
选择不同的数据结构。使用这样的字符串没有意义,然后解析字符串。只需使用一个字典,甚至是一个元组列表。 –
另外,顺便说一句,不要使用'在f.readlines()'行,就用'的行F'。后者是更有效,这一个接一个读取行,你不必将整个文件读入内存,并兑现像前行的列表。 –