[英]Passing list of values into dictionary in Python
我有一个包含名称和数字列表的 .txt 文档,并试图将它们传递到键/值对中的字典中。 值列表看起来像这样(它是键/值对的垂直列表,其间有 \n 新行):
文件名:“demo.txt” 内容:
Brandon: 115.5
James: 128.87
Joel:
Luke:
Sarah: 827.43
Brandon: 100
Jimmy: xyz
Sue: -153
Sue: 100
Fred: x1y2
This
Should
Not
Get
Included
// 对于空格和非数字值,我试图跳过它们——否则,如果字典中已经存在该名称,我想更新该值。 我已经尝试了以下方法,但希望得到一些建议:
d = {}
lst = []
f = open("demo.txt", "r")
lines = f.readlines()
f.close()
for line in lines:
lst.append(line.strip().split())
for i in lst:
if len(i) < 2:
lst.remove(i)
else:
continue
for i in lst:
try:
i[0] = i[0][:-1]
except:
lst.remove(i)
for i in lst:
try:
if len(i) < 2:
lst.remove(i)
else:
i[1] = float(i[1])
except:
lst.remove(i)
for i in lst:
key = i[0]
value = float(i[1])
if key in d:
existing_value = d.get(key)
value = float(existing_value) + float(value)
d.update({key: value})
else:
d[key] = value
print(d)
我会做这样的事情:
d = {}
for line in open("demo.txt"):
if ':' in line:
key, value = line.split(":")
try:
d[key] = float(value.strip())
except ValueError:
pass
它会跳过任何没有:
字符的行。 否则,它将该行拆分为一个键(在:
之前)和一个值(在:
之后),并尝试将值转换为浮点数。 如果失败,它会继续下一行。 如果成功,它要么在字典中创建一个新密钥,要么更新现有密钥。
在建议方面,有几点说明:
except
没有指定要捕获的错误类型。 这是不好的做法。 您通常应该只捕获您期望的错误类型。 至少,做except Exception
几乎可以捕获所有异常,但忽略由您不想捕获的事物引起的异常,例如终止信号with open('demo.txt') as f: f.readline()
的上下文管理器,或者像我一样使用循环,这样您就不必担心记得稍后关闭文件 - 它会自动关闭
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.