向自身添加 python 字典值

Addition of a python dict value to itself

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

我要提前道歉,这是一个非常补救的问题。

使用键的默认值初始化字典:

#!/usr/bin/python

dict= {'total': 0}
for num in range (1,5):
   dict['total'] += num

print dict['total']

我假设您给出的代码的预期输出是 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'] 还没有被定义。

您也可以使用 defaultdict

#!/usr/bin/python

from collections import defaultdict

dic = defaultdict(int)
for num in range (1,5):
    dic['total'] += num

print dic['total']

为什么您尝试的方法不起作用?在循环的第一次迭代中,+= 在语法上扩展为

dict['total'] = dict['total'] + 1

当然,在这个等式的右边,dict['total'] 的值还没有被定义。

您可以通过在迭代之前为键 total 初始化一个值来解决您作为 @FilipMalczak 引用的问题:

dict = {'total':0}

你想要的词是加法:连接是你对列表和字符串等序列所做的。

虽然您可以预先初始化 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() 给出零。