Skip to main content
 首页 » 编程设计

python之在由分隔符分隔的两个值的列表中,访问第二列中的第二个字段

2025年05月04日24lonelyxmas

我有以下代码,并且想要最有效的返回主题的方法,对于任何给定的老师:

注意:列表 alldata 以以下格式保存数据:

['Mr Moose : Maths', 'Mr Goose: History', 'Mrs Marvin: Computing'] 

其中“穆斯先生:数学”是列表中的第一个元素。 对于搜索的任何给定老师,我希望获得数学、历史和计算方面的知识。

代码

#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] 的地方添加一行简单的代码和/或任何更优雅的解决方案来修复此代码,即展示如何直接在文件中搜索给定名称(例如 Mr Moose)并返回下一个字段(在本例中为 Maths)。与使用 csv 处理相比,这里的过程看起来确实很艰巨。

请您参考如下方法:

我建议将您的列表转换为 dict ionary 用于快速轻松地查找。

这是将列表转换为字典的方法:

In [550]: t_list = ['Mr Moose : Maths', 'Mr Goose: History', 'Mrs Marvin: Computing'] 
 
In [556]: t_dict = dict(tuple(map(str.strip, x.split(':'))) for x in t_list); t_dict 
Out[556]: {'Mr Goose': 'History', 'Mr Moose': 'Maths', 'Mrs Marvin': 'Computing'} 

正如所指出的,如果你能保证 : 周围有一个空格,你可以将 map(str.strip, x.split(':')) 缩短为 x.split(' : ').

现在,如果你想要某位老师教的科目,你需要做的就是使用字典索引来获取它:

In [557]: t_dict['Mr Moose'] 
Out[557]: 'Maths'