繁体   English   中英

如何根据从文本文件导入的数据创建 Python 字典?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM