拥有一个python字典并且知道它只由一个键/值对组成,检索该单个/唯一项目的最佳方法是什么?
到目前为止,我知道我可以使用以下两种方法之一:
list(mydict.keys())[0]
next(iter(mydict))
据我了解,list
表现比iter
表现差,所以后一种方法应该更好,对吧?哪种方式最好?有什么比我指出的两种方式更好的东西?请告诉我。
答案 0 :(得分:6)
哪种方式最好?
我建议使用next(iter(d))
而非list(mydict.keys())[0]
从字典中检索密钥。如您所料,在效率方面使用next(iter(d))
更多更好。
通过计时每种方法可以观察效率差异:
>>> import timeit
>>> setup='from string import ascii_letters; d = {k: v for k, v in enumerate(ascii_letters)}'
>>> timeit.timeit(stmt='list(d.keys())[0]', setup=setup)
1.0895291733333334
>>> timeit.timeit(stmt='next(iter(d))', setup=setup)
0.2682935466666656
随着字典大小的增加,使用next(iter(d))
而不是list(d.keys())[0]
的选择变得非常非常:
>>> setup='d = {k: v for k, v in enumerate(range(500, 10000))}'
>>> timeit.timeit(stmt='list(d.keys())[0]', setup=setup)
98.52252842666667
>>> timeit.timeit(stmt='next(iter(d))', setup=setup)
0.2720192000000452
next(iter(d))
比list(d.keys())[0]
执行得更好,主要是因为它避免在内存中创建所有字典键的潜在巨大列表,而它实际上只需要第一个元素。
答案 1 :(得分:1)
要从字典中获取“第一个”键值对,您必须使用OrderedDict
:
from collections import OrderedDict
d = OrderedDict()
#add items as normal
first_key = [a for a, b in d.items()][0]
print(d[first_key])