Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dict.update()未按预期工作_Python_Python 3.x_Dictionary_Increment - Fatal编程技术网

Python dict.update()未按预期工作

Python dict.update()未按预期工作,python,python-3.x,dictionary,increment,Python,Python 3.x,Dictionary,Increment,我有一个空字典,我正在用update方法处理它。我使用一个变量作为键,+1作为值。见下文: myDict, var = {}, 10 myDict.update( { var : +1 } ) 假设我执行了两次,我希望myDict={10:2}。相反,它是{10:1} 我明白我可以通过以下方式直接解决此问题: myDict[var] += 1 print (myDict) {10 : 2} 然而,var并不总是10我想递增,var可以是任何数字。如果它是除10以外的任何数字,我会得到一个Ke

我有一个空字典,我正在用update方法处理它。我使用一个变量作为键,
+1
作为值。见下文:

myDict, var = {}, 10
myDict.update( { var : +1 } )
假设我执行了两次,我希望
myDict={10:2}
。相反,它是
{10:1}

我明白我可以通过以下方式直接解决此问题:

myDict[var] += 1
print (myDict)
{10 : 2}
然而,
var
并不总是
10
我想递增,
var
可以是任何数字。如果它是除
10
以外的任何数字,我会得到一个
KeyError
,因为该键在字典中不存在

如何使用变量作为键更新字典,并将值设置为
1
,但如果该键已存在于
myDict
中,则应增加相应的值

我已经通过一个try-and-except语句做到了这一点,但我觉得它不是很像python

try:
    myDict[var] += 1
except:
    myDict.update( { var : 1 } )

这样,它将尝试将
var
的值增加1。如果密钥不存在,则将更新
myDict
,以创建密钥并将值设置为1。有更好的办法吗?

你要的是柜台;Python在
集合
模块中为您提供了这一功能:

from collections import Counter

c = Counter()
var = 10    
c.update({var: 1})
print(c) # Counter({10: 1})
c.update({var: 1})
print(c) # Counter({10: 2})

如果您愿意,您可以使用
d[var]=d.get(var,0)+1
获得与普通dict相同的结果,但是在我看来,
计数器
选项在这种情况下更清晰。

这非常有效。是否可以将计数器添加到数据帧?因为我想在我的程序结束时这样做。Dataframes可以将字典作为输入,所以如果它出于某种原因不接受计数器,我会感到惊讶。如果没有,您可以在传递它时始终使用
dict(c)
。@AugustWilliams如果您的计数是看起来的标量,那么您只需传递一个索引,例如
pd.DataFrame(计数器([4,5,2,4,5]),索引=[0])
只是尝试将它们添加到数据帧中,就好像它们是字典一样-效果非常好。