[英]How to create a Python dictionary from data imported from a text file?
我在名为my_text.txt
的文件中有以下文本:
David: 2
Barbara: 97.2
David: nothing
William:
Lynn: 725
Nancy : 87
David: 54
Lewis: 18.30
Sue: 3193.74
James: 41.73
David: 974.1
我希望能够读取这个文件并创建一个字典。
这是我的代码:
def make_dictionary(file_name):
d = {}
with open(file_name, 'r') as file:
for line in file:
(key, val) = (line.split(':')[0], line.split(':')[1])
return print(d)
make_dictionary('my_text.txt')
我收到一个索引错误:
IndexError:列表索引超出范围
有谁看到错误在哪里?
谢谢!
由于空白行而出现此错误。
您的代码假定split
将为您返回两个元素。
在尝试使用split
的返回值之前,您需要检查空行——并跳过这些行。
此外,更健壮的代码还会检查该行是否包含要拆分的冒号 ( :
)。 如果该行不包含冒号,则代码将失败。 在这种情况下,您可能希望引发异常,或者至少打印一个错误警告。 您还需要使用strip
来删除无关的空格。
您的代码也没有分配给字典 - 所以我也添加了它。 另请注意 - print
返回None
,因此在您return print(d)
的地方,它将返回None
。 你会想要返回d
,所以我也更新了它。
还有最后一件事。 您可能希望将第二列数据转换为可以用作 Python 中的数字的float
,而不是从文件中读取时的字符串。 这样做时,无效行也会引发异常——或者您可能想要捕获它并以不同的方式处理它。
尝试以下操作:
def make_dictionary(file_name):
d = {}
with open(file_name, 'r') as file:
for line in file:
line = line.strip()
if line == '':
# Skip blank lines
continue
elif ':' in line:
# Do the split, since we *know* we can
key, val = line.split(':')
# Will raise an exception if the 2nd column is not a valid number
d[key.strip()] = float(val.strip())
else:
# Raise an exception if an invalid line is encountered
raise ValueError('Cannot split line')
return d
print(make_dictionary('my_text.txt'))
注意:您的原始代码将行split
两次(这是低效且不必要的)。 在 Python 中,您可以改为进行并行分配(更好地称为“解包”)——我已经修改了代码以使用该方法。
如果要制作字典,则应使用 .json 文件。 这些是为存储类似对象的字典而设计的。
你的威廉钥匙没有价值。
你有几个空行。
因此,在分割线之前,检查它是否不为空,分割后检查它的长度是否为 2。
而且,您需要为 d 分配一些东西才能返回它,例如:
d[key] = value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.