Python 如何修复从文件生成词典的代码中的错误
这是我在作业中应该做的: 此函数用于创建银行字典。给定的论点 是要加载的文件名。文件中的每一行看起来都像密钥: value Key是用户名,value是更新用户名称的数量 在银行开立的帐户。该值应该是一个数字,但是它是 可能没有值或该值无效 号码 你将做什么:Python 如何修复从文件生成词典的代码中的错误,python,Python,这是我在作业中应该做的: 此函数用于创建银行字典。给定的论点 是要加载的文件名。文件中的每一行看起来都像密钥: 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