python - 如何从文本文件中的每一行创建一个字典条目?
问题描述
所以,我有这个包含以下信息的文本文件:
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)
解决方案
作为 dict 理解:
with open("data.txt", "r") as f:
students = {k:v for k, *v in map(str.split, f)}
解释:
文件对象f
已经是一个迭代器(产生每一行),我们想要分割这些行,所以我们可以使用map(str.split, f)
or (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']}
推荐阅读
- python - 如何从内部 if 语句中退出外部循环
- php - 执行“'cache:clear --no-warmup'”命令时出错:
- javascript - 通过在 javascript 中第一次出现逗号来分割
- javascript - react.js 组件创建时如何设置样式?
- angularjs - AngularJS:仅过滤未删除的用户
- sql-server - SQL Server - 过去 3 天的添加/累积
- mysql - MySQL替换多个字符
- go - 如何在 Golang 中使用 struct 和 map[string]interface{} 之间的反射比较数据
- c# - 如何分配全局初始化事件?
- python - 用 Pandas Series 中的元素填充 Pandas DataFrame 的对角线