Python 如何修复从文件生成词典的代码中的错误

Python 如何修复从文件生成词典的代码中的错误,python,Python,这是我在作业中应该做的: 此函数用于创建银行字典。给定的论点 是要加载的文件名。文件中的每一行看起来都像密钥: value Key是用户名,value是更新用户名称的数量 在银行开立的帐户。该值应该是一个数字,但是它是 可能没有值或该值无效 号码 你将做什么: 试着根据文件的内容编一本词典 如果密钥不存在,请创建一个新的密钥:值对 如果该键确实存在,则使用数量增加其值 您还应该处理值无效的情况。如果是这样,请忽略该行,不要更新字典 最后,返回字典 注意:银行文件中的所有用户都在用户帐户文件中

这是我在作业中应该做的:

此函数用于创建银行字典。给定的论点 是要加载的文件名。文件中的每一行看起来都像密钥: value Key是用户名,value是更新用户名称的数量 在银行开立的帐户。该值应该是一个数字,但是它是 可能没有值或该值无效 号码

你将做什么:

  • 试着根据文件的内容编一本词典
  • 如果密钥不存在,请创建一个新的密钥:值对
  • 如果该键确实存在,则使用数量增加其值
  • 您还应该处理值无效的情况。如果是这样,请忽略该行,不要更新字典
  • 最后,返回字典
注意:银行文件中的所有用户都在用户帐户文件中

“文件名”文件的内容示例:

 Brandon: 115.5
 James: 128.87
 Sarah: 827.43
 Patrick:'18.9
这是我的代码:

bank = {}
with open(filename) as f:
    for line in f:
        line1 = line
        list1 = line1.split(": ")
        if (len(list1) == 2):
            key = list1[0]
            value = list1[1]
            is_valid = value.isnumeric()
            if is_valid == True
               value1 = float(value)
               bank[(key)] = value1

return bank

我的代码返回一个导致错误的
NoneType
对象,但我不知道代码哪里出错。此外,还有许多其他错误。如何改进/修复代码?

您可能在
else
语句中点击了
return
,该语句不返回任何内容(因此不返回任何内容)。因此,只要文件中有一行不包含两个空格分隔的值,就不会返回任何内容


还要注意的是,您的代码只是试图为字典中的键赋值。根据文档,如果现有键已经存在,则不会向其添加值。

请尝试此代码,让我解释其中的所有内容,因为这取决于您对Python数据结构的理解程度:

代码语法

print(is_number(adict['Brandon']))
输出

值验证方面通过少量搜索,您会发现您可以检查值是否为
数字

通过调用函数

print(is_number(a))
print(is_number(1.4))
print(is_number('hello'))
输出

True
True
False
True
现在,让我们回到要编辑的代码

您需要做的就是将条件添加到此
dict

adict = {line[:line.index(':')]: line[line.index(':')+1: ].strip(' \n')  for line in data.readlines() if is_number(line[line.index(':')+1: ].strip('\n')) == True}
输出

True
True
False
True
您可以通过将其传递给我们创建的函数来检查dict的值

代码语法

print(is_number(adict['Brandon']))
输出

True
True
False
True

如果需要,可以向
is_number()
函数添加更多扩展。

这将有效地完成以下工作:

bank = {}
with open(filename) as file:
    for line in file:
        key, val = line.rsplit(": ", 1) # This will split on the last ': ' avoiding ambiguity of semi-colons in the middle
        # Using a trial and error method to convert number to float
        try:
            bank[key] = float(val)
        except ValueError as e:
            print(e)
return bank


谢谢,我应该忽略文件中没有值或值无效的行。如何忽略该行而不使用return.if语句,只有在满足条件时才会执行。如果不包括else部分,则会自动忽略该部分。因此,您基本上什么也不做,因此进入循环的下一次迭代,从文件中获取下一行。我删除了else部分,但程序仍然返回一个NoneType。您能提供一个您试图读取的输入文件的示例吗?它只有两列吗?文件的所有行都是这样的;key:value你能给你的
文件名添加一个简单的数据吗
,这样我们就可以了解
.txt
数据的结构了?因为,有更好的方法使
key
事务值列表
比这更好;你能在帖子中显示简单的数据吗?如果你不需要写的话,至少你的数据的屏幕截图“filename”是我应该加载的文件(它是一个变量)。我应该显示文件的内容吗?程序应该读取文件的每一行,并将str拆分为key:value,因为str和float分别取决于您在文章中提供的简单数据,它的任何错误都将取决于您编写的数据,即使它是一个空格。这比我在python中学到的任何东西都要多。在任何编程语言中,最重要的是理解语言本身的数据结构。有些程序员关注的是面向对象和函数编程,而不是数据结构概念以及如何分割和迭代算法。如果我的回答令您满意,请不要忘记标记它✓.它只有10行,但我必须向您解释所有内容,以便您能够理解写入的内容。此方法似乎有效,但正如上面的赋值规则所述:如果该行的值无效,则程序应忽略该行。。不引发值错误。然后只需在except块中写入
pass