拥有一个 python 字典并且知道它仅由一个键/值对组成,检索单个/唯一项的最佳方法是什么?
到目前为止,我知道我可以使用以下两种方式之一:
list(mydict.keys())[0]
next(iter(mydict))
据我所知, list
性能比 iter
差,所以后一种方法应该更好,对吧?哪些方式最好?有比我指出的两种方式更好的东西吗?请告诉我。
原文由 danicotra 发布,翻译遵循 CC BY-SA 4.0 许可协议
拥有一个 python 字典并且知道它仅由一个键/值对组成,检索单个/唯一项的最佳方法是什么?
到目前为止,我知道我可以使用以下两种方式之一:
list(mydict.keys())[0]
next(iter(mydict))
据我所知, list
性能比 iter
差,所以后一种方法应该更好,对吧?哪些方式最好?有比我指出的两种方式更好的东西吗?请告诉我。
原文由 danicotra 发布,翻译遵循 CC BY-SA 4.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
原文由 alick 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答915 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
我建议使用
next(iter(d))
而不是list(mydict.keys())[0]
从字典中检索键。如您所料,使用next(iter(d))
在效率方面 要 好得多。可以通过计时每种方法来观察效率差异:
随着字典大小的增加,使用
next(iter(d))
而不是list(d.keys())[0]
的选择变得非常 非常 明显:next(iter(d))
比list(d.keys())[0]
执行得好得多,主要是因为它避免了在内存中创建所有字典键的潜在巨大列表,而实际上它只需要第一个元素。