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