python - python - 如何添加或增加字典项?

我正在编写的代码采用以下形式:


# foo is a dictionary


if foo.has_key(bar):


 foo[bar] += 1


else:


 foo[bar] = 1



我在我的程序中写了这种的。

是否有一些简单的语法技巧? 还是应该这样做?

时间:

使用defaultdict


from collections import defaultdict



foo = defaultdict(int)


foo[bar] += 1



在python For Python 2.5和2.6,你可以使用它的backported版本

dict get()采用可选第二个参数,该参数可用于提供默认值:


foo[bar] = foo.get(bar, 0) + 1



我做了一些比较,.get()命令是最快的。

输出:


get 0.543551800627


exception 0.587318710994


haskey 0.598421703081



代码:


import timeit


import random



RANDLIST = [random.randint(0, 1000) for i in range(10000)]



def get():


 foo = {}


 for bar in RANDLIST:


 foo[bar] = foo.get(bar, 0) + 1



def exception():


 foo = {}


 for bar in RANDLIST:


 try:


 foo[bar] += 1


 except KeyError:


 foo[bar] = 1



def haskey():


 foo = {}


 for bar in RANDLIST:


 if foo.has_key(bar):


 foo[bar] += 1


 else:


 foo[bar] = 1



def main():


 print 'get', timeit.timeit('get()', 'from __main__ import get', number=100)


 print 'exception', timeit.timeit('exception()', 'from __main__ import exception', number=100)


 print 'haskey', timeit.timeit('haskey()', 'from __main__ import haskey', number=100)



if __name__ == '__main__':


 main()



对于python > =2.5,你可以执行以下操作:


foo[bar] = 1 if bar not in foo else foo[bar]+1



你还可以利用异常处理中的控制结构,当你试图为不存在的键赋值时,字典会引发KeyError异常:


my_dict = {}


try:


 my_dict['a'] += 1


except KeyError, err: # in 2.6: `except KeyError as err:`


 my_dict['a'] = 1



...