从字典中获取键的最有效方法



d是一个大的(但仍然适合内存)Python字典,其中我们不知道键是什么。什么是最有效的方法(高效应该意味着用于执行任务的内存与字典的大小相比很小,并且速度至少应该与下面的任何方法一样快)来获得d的键(无论您获得哪个键)和d在内容或顺序(对于较新版本的Python)上都不变一旦您完成?这个问题与可读性无关,而是与python字典对象有关。例如有两个方法:

  1. 使用list方法
any_key = list(d)[0]
  1. 使用popitem方法
any_key,y = d.popitem()
d[any_key]=y

所以两个方法本质上都实现了一个peekkey()方法。我的基本时间分析表明,方法2)肯定比方法1)快,我假设方法2)使用的内存要少得多(但我还不知道这是不是真的)。方法2是"最好的"。还是有更好的办法?

如果您只使用Python获得快速且可读的方法,则可以获得额外的加分。对于直接访问字典对象的C/Python方法,如果该方法比最佳Python方法快得多,则会得到更多的分数。

如果你不关心你得到的是哪个键,并且你不想要"sample"在随机意义上,然后使用next

获取第一个键
key = next(iter(d.keys()))

,为简洁起见,与

相同
key = next(iter(d))

为了测试性能,如果我生成一个包含1000个元素的字典

d = {k:k for k in range(1000)}

然后对这两种方法进行基准测试,next方法大约快95%

>>> timeit.timeit('sample_key = list(d)[0]', setup='d = {k:k for k in range(1000)}')
5.3303698
>>> timeit.timeit('next(iter(d.keys()))', setup='d = {k:k for k in range(1000)}')
0.18915620000001354

相关内容

  • 没有找到相关文章

最新更新