我只是在学习Python而且我对如何将键值连接到自身感到难过。
例如,这有效.....
#!/usr/bin/python
dict= {}
for num in range (1,5):
dict['total']=num
print dict['total']
这可预测地打印“4”,因为dict ['total']的值不断被num中的任何内容替换
我想做的是不断地将dict ['total']的值与每次传递连接起来(我不需要下面打印,仅为了清晰起见而包括在内)..
dict['total'] = 1,
dict['total'] = 3,
dict['total'] = 6,
dict['total'] = 10
我认为这就像从
更改分配线一样简单dict['total']=num
到
dict['total']+=num
但这给了我一个错误.....
Traceback (most recent call last):
File "./count_loop.py", line 5, in <module>
dict['total']+=num
KeyError: 'total'
我会提前道歉,这是一个非常有用的问题。
答案 0 :(得分:3)
使用键的默认值初始化字典:
#!/usr/bin/python
dict= {'total': 0}
for num in range (1,5):
dict['total'] += num
print dict['total']
答案 1 :(得分:2)
你想要的词是加法:连词是你用列表和字符串等序列做的。
虽然您可以预先初始化dict
,但只有事先知道您要使用的所有密钥才能生效。更灵活的解决方案的天真版本是:
try:
d['total'] += num
except KeyError:
d['total'] = num
但更简单,更好的是:
from collections import defaultdict
d = defaultdict(int)
for num in range (1,5):
d['total'] += num
当你要求一个密钥并且它还不存在时,defaultdict只是用默认值创建它而不是失败。它调用我们给出的参数,int()
给出零。
答案 2 :(得分:1)
我假设您提供的代码的预期输出为10.
在这种情况下,您只需要在循环之前初始化dict['total']
:
dict= {'total': 0}
for num in range (1,5):
dict['total'] += num
print dict['total']
当您执行dict['total'] += num
时,它就像dict['total'] = dict['total'] + num
,由于dict['total']
尚未定义,因此在第一次循环时显然会抛出错误。
答案 3 :(得分:0)
您还可以使用defaultdict
:
#!/usr/bin/python
from collections import defaultdict
dic = defaultdict(int)
for num in range (1,5):
dic['total'] += num
print dic['total']
答案 4 :(得分:0)
为什么你尝试不起作用?在循环的第一次迭代中,+=
在语法上扩展为
dict['total'] = dict['total'] + 1
当然,在这个等式的右边,还没有定义dict ['total']的值。
您可以通过在迭代前初始化键total
的值来解决@FilipMalczak引用问题:
dict = {'total':0}