【发布时间】:2013-12-18 17:36:45
【问题描述】:
我最近发现并开始使用默认字典来替换几个更庞大的结构。我在《python 之禅》中读到,python 的一个关键点是“应该有一种——最好只有一种——明显的方式来做到这一点。”
基于该标准(或者更实际地基于内存使用情况或速度),以下哪一项(或完全不同的东西)是最好的?我有预感第一个是正确的,但想听听其他人的意见。
my_dict = defaultdict(int)
for generic in iterable:
my_dict[generic] +=1
或:
my_dict = {}
for generic in iterable:
if generic not in my_dict:
my_dict[generic] = 1
else:
my_dict[generic]+=1
或:
my_dict = {}
for generic in iterable:
try:
my_dict[generic] += 1
except(KeyError):
my_dict[generic] = 1
使用 my_dict = defaultdict(list) 和使用 append 函数也是如此。假设使用多个 for 循环或其他条件,而不是简单地从单个迭代中计算通用值,因为这显然具有不同的特性。
【问题讨论】:
-
对于您在这里所做的事情,请使用collections.Counter
-
defaultdict是三者中最好的,但正如@PauloAlmeida 所说,如果您只使用整数,最好使用Counter。当你真正想调用默认类型d=defaultdict(list); d[0].extend([1,2,3])等的方法时使用defaultdict
标签: python try-catch defaultdict