向自身添加 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()
给出零。
我正在学习 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()
给出零。