Skip to main content
 首页 » 编程设计

python之如何从文本文件中的每一行创建一个字典条目

2025年05月04日11freeliver54

所以,我有这个包含以下信息的文本文件:

student_num1 student_name1 student_grade1 
student_num2 student_name2 student_grade2 
student_num3 student_name3 student_grade3 

我想做的是我想把这个文本文件的每一行作为一个字典条目,格式如下:

students = { student_num1: [student_name1, student_grade1], student_num2: [student_name2, student_grade2], student_num3: [student_name3, student_grade3] } 

基本上,该行的第一个字符串应该是键,它旁边的 2 个字符串应该是值。但我不知道如何让 python 分隔每一行中的字符串并将它们分配为字典的键和值。

编辑: 所以,我尝试了一些代码:(我看到了你所有的解决方案,我认为它们肯定会起作用,但我也想学习创建我的解决方案,所以如果你能检查我的,我将不胜感激!)

for line in fh: 
    line = line.split(";") 
    student_num = line[0] 
    student_name = line[1] 
    student_grade = line[2] 
 
    count =+ 1 
    direc[student_num] = [student_name,student_grade] 
    student_num = "student_num" + str(count) 
    student_grade = "student_grade" + str(count) 
    student_name = "student_name" + str(count) 
 
print(direc) 

问题是我在第 10 行或“student_name = line[1]”这部分收到列表索引超出范围的错误

编辑:谢谢大家!您建议的每一个解决方案都有效!我还修复了自己的解决方案。这是固定的(如@norok2 所建议):

for line in fh: 
    line = line.split(" ") 
    student_num = line[0] 
    student_name = line[1] 
    student_grade = line[2] 
 
    count =+ 1 
    direc[student_num] = [student_name,student_grade] 
    student_num = "student_num" + str(count) 
    student_grade = "student_grade" + str(count) 
    student_name = "student_name" + str(count) 

请您参考如下方法:

作为听写理解:

with open("data.txt", "r") as f: 
    students = {k:v for k, *v in map(str.split, f)} 

解释:

文件对象 f 已经是一个迭代器(产生每一行),我们想要拆分行,所以我们可以使用 map(str.split, f) 或 (line.split() for line in f)。 之后我们知道,第一项是字典的键,其余项是值。我们可以为此使用解包。解包示例:

>>> a, *b = [1,2,3] 
>>> a 
1 
>>> b 
[2, 3] 

然后我们使用推导式来构建包含我们在解包中捕获的值的字典。 字典理解是建立字典的表达式,例如:

>>> {x:x+1 for x in range(5)} 
{0: 1, 1: 2, 2: 3, 3: 4, 4: 5} 

例子,

文件数据.txt:

student_num1 student_name1 student_grade1  
student_num2  student_name2 student_grade2  
student_num3 student_name3 student_grade3 

阅读它

>>> with open("data.txt", "r") as f: 
...     students = {k:v for k, *v in map(str.split, f)} 
...  
>>> students 
{'student_num1': ['student_name1', 'student_grade1'], 'student_num2': ['student_name2', 'student_grade2'], 'student_num3': ['student_name3', 'student_grade3']}