擅长:python、mysql、java
<p>我相信这个问题已经得到了很好的回答,但希望这一比较将有助于揭示干净代码与时间的权衡:</p>
<pre><code>from timeit import timeit
from random import choice
A = {x:[y for y in range(100)] for x in range(1000)}
def test_pop():
k, v= A.popitem()
A[k] = v
def test_iter(): k = next(A.iterkeys())
def test_list(): k = choice(A.keys())
def test_insert(): A[0] = 0
if __name__ == '__main__':
print('pop', timeit("test_pop()", setup="from __main__ import test_pop", number=10000))
print('iter', timeit("test_iter()", setup="from __main__ import test_iter", number=10000))
print('list', timeit("test_list()", setup="from __main__ import test_list", number=10000))
print('insert', timeit("test_insert()", setup="from __main__ import test_insert", number=10000))
</code></pre>
<p>结果如下:</p>
<pre><code>('pop', 0.0021750926971435547)
('iter', 0.002003908157348633)
('list', 0.047267913818359375)
('insert', 0.0010859966278076172)
</code></pre>
<p>似乎使用iterkeys的速度比弹出一个条目并重新插入要快得多,但比创建列表并从中选择随机对象快10倍。</p>