为自己添加python dict值

时间:2015-07-17 19:05:37

标签: python concatenation

我只是在学习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'

我会提前道歉,这是一个非常有用的问题。

5 个答案:

答案 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}