拥有一个python字典并且知道它只由一个键/值对组成,检索该单个/唯一项的最佳方法是什么?
到目前为止,我知道我可以使用以下两种方法之一:
list(mydict.keys())[0]
next(iter(mydict))
据我所知,list表现比iter一些人差,所以后一种方法应该更好,对吧?哪种方式最好?有什么比我指出的两种方式更好的东西?请告诉我.
哪种方式最好?
我建议使用next(iter(d))over 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
next(iter(d))执行得比list(d.keys())[0]主要好得多,因为它避免在内存中创建所有字典键的潜在巨大列表,而它实际上只需要第一个元素.
由于问题假设字典只有一个键值对,因此除了接受的答案之外,我还想添加两种方法。
dict.popitem()[0]。popitem()返回元组中唯一的键值对:(key, value)。如果您不想改变原始字典,请先复制一份。set(mydict).pop()。Python 3.9.6 中的简单性能比较:
In [11]: import timeit
In [12]: timeit.timeit(stmt='d={1:2}; d.popitem()[0]')
Out[12]: 0.15144950605463237
In [13]: timeit.timeit(stmt='d={1:2}; next(iter(d))')
Out[13]: 0.1860927080269903
In [14]: timeit.timeit(stmt='d={1:2}; set(d).pop()')
Out[14]: 0.19704585697036237
In [15]: timeit.timeit(stmt='d={1:2}; list(d)[0]')
Out[15]: 0.2412048210389912
Run Code Online (Sandbox Code Playgroud)