这个python片段出了什么问题:
for zhszam in pontok.keys():
s = 0
for p in pontok[zhszam]:
if p.isdigit():
s += int(p)
print s
pontok[zhszam] = s
return pontok
其中 pontok 是{1: ['10', ' 5', ' 3', ' 10', ' 7'], 2: ['10', ' 5', ' 3', ' 10']}
。
它以某种方式给出了以下错误输出:
10
10
{1: 10, 2: 10}
虽然值应该是数字的总和。
提前致谢!
答案 0 :(得分:5)
除第一个'10'
之外的每个字符串都有一个前导空格,它不是数字。因此它根本没有被处理。
尝试:
for p in pontok[zhszam]:
p = p.strip()
# ...
答案 1 :(得分:2)
你不应该使用str.isdigit
,它可以很容易地破解。最好使用int()
的try-except块。
>>> dic = {1: ['10', ' 5', ' 3', ' 10', ' 7'], 2: ['10', ' 5', ' 3', ' 10']}
for k,v in dic.iteritems():
s = 0
for x in v:
try:
s += int(x) #raises Error if the item is not a valid number
except:
pass #leave the item as it is if an error was thrown
dic[k] = s
...
>>> dic
{1: 35, 2: 28}
答案 2 :(得分:1)
我宁愿发表评论,也不愿留下这个答案,但我还没有代表。这个问题将帮助您剥离这些前导空格:Python remove all whitespace in a string