首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用infinite_defaultdict的价格

使用infinite_defaultdict的价格
EN

Stack Overflow用户
提问于 2014-03-27 07:27:16
回答 1查看 194关注 0票数 5

这是上天赐给我的:

代码语言:javascript
复制
>>> from collections import defaultdict
>>> infinite_defaultdict = lambda: defaultdict(infinite_defaultdict)
>>> d = infinite_defaultdict() 
>>> d['x']['y']['z'] = 10

雷蒙德·赫廷格在推特上

既然如此,我就不明白我们为什么要再这么做了:

代码语言:javascript
复制
mydict = defaultdict(list)
mydict = defaultdict(lambda: defaultdict(float))

等等..。

但我可能错了。有没有你想避免infinite_defaultdict的情况?

更新:我试着对时间进行基准测试

代码语言:javascript
复制
from collections import defaultdict

def infdd():
   infinite_defaultdict = lambda: defaultdict(infinite_defaultdict)
   idd = infinite_defaultdict()
   idd['x'] = [1,2,3]

def plaindd():
   ddl  = defaultdict(list)
   ddl['x'] = [1,2,3]

if __name__ == '__main__':
    import timeit
    print "Infd = %.3f" % (timeit.timeit("infdd()",setup="from __main__ import infdd"))
    print "Plaind = %.3f" % (timeit.timeit("plaindd()",setup="from __main__ import plaindd"))

显然,infinite_dict的速度几乎是正常速度的两倍:

代码语言:javascript
复制
Infd = 0.632
Paind = 0.387
EN

回答 1

Stack Overflow用户

发布于 2015-11-21 10:22:46

如果需要默认值为dict以外的值,则不应使用infinite_defaultdict。例如,如果要计数项或累积项数组,则需要默认值为数字或数组。

代码语言:javascript
复制
def group_by(key, items):
    result = defaultdict(list)
    for item in items:
        result[key(item)].append(item)
    return result

group_by(len, ['here', 'are', 'some', 'words'])
# -> { 3: ['are'] 4: ['here', 'some'], 5: ['words'] }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22680866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档