给定python字典,最有效的方法是提取以字符串模式开头的键

2024-05-13 02:54:05 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个python字典:

{'i:crid1':1, 'c:crid1':1, 'i:crid2':1, 'c:crid2':1....}

在python中,什么是最优雅的方法来提取所有以c:开头的键?在

^{pr2}$

速度是最重要的,可能是一个很大的决定。也许编织是一个候选工具。在

我加了这个评论。这句话来自雷迪斯。数据结构没有选择。。。我是这么说的。我需要速度。不是优雅。在


Tags: 工具方法数据结构字典评论速度编织pr2
3条回答
>>> d = {'i:crid1': 1, 'c:crid1': 1, 'i:crid2': 1, 'c:crid2': 1}
>>> %timeit dict((k, v) for k, v in d.iteritems() if k.startswith('c:'))
    # 100000 loops, best of 3: 4.12 us per loop
>>> import re
>>> patt = re.compile('^c:.')
>>> %timeit dict((k, v) for k, v in d.iteritems() if patt.match(k))
    # 100000 loops, best of 3: 5.22 us per loop
>>> { k:v for k,v in d.iteritems() if k.startswith('c:') }
    # 100000 loops, best of 3: 2.22 us per loop

使用dict理解既快速又简洁,尽管如果速度确实是个问题,那么dict一开始就显得不太合适:

>>> d = {'i:crid1':1, 'c:crid1':1, 'i:crid2':1, 'c:crid2':1 }
>>> { k:v for k,v in d.iteritems() if k.startswith('c:') }
{'c:crid2': 1, 'c:crid1': 1}

或者,如果您使用的是Python 2.7之前的版本:

^{pr2}$

如果速度是最重要的,您可能需要首先构建dict的dict,其中外部dict按前缀索引:

dd = {'i':{ 'i:crid1':1, 'i:crid2':1 }, 'c':{'c:crid1':1, 'c:crid2':1 } }

如果空间不是对象,并且您有时需要整个dict而不是前缀子集,那么您可以同时构建一个大dict和dict版本的dict;否则,在需要时动态构建它并不难。在

相关问题 更多 >