我一直在创建巨大的字典(数百万个条目),我注意到如果我用键创建它们,它会更快。
我想这与哈希函数的冲突有关,但有人可以解释为什么会发生这种情况,以及它在 python 版本之间是否一致?
这里有一个人为的例子:
import timeit
import random
def get_test_data(num, size):
olist, ulist = [], []
for _ in range(num):
otest = [str(i) for i in range(size)]
utest = list(otest)
random.shuffle(utest)
olist.append(otest)
ulist.append(utest)
return olist, ulist
NUM_TESTS = 20
# Precalculate the test data so we only measure dict creation time
ordered, unordered = get_test_data(NUM_TESTS, 1000000)
def test_ordered():
dict((k, k) for k in ordered.pop())
def test_unordered():
dict((k, k) for k in unordered.pop())
print "unordered: ",
print timeit.timeit("test_unordered()",
setup="from __main__ import test_unordered, test_ordered",
number=NUM_TESTS)
print "ordered: ",
print timeit.timeit("test_ordered()",
setup="from __main__ import test_unordered, test_ordered",
number=NUM_TESTS)
我机器中的输出始终是:
(X)$ python /tmp/test.py
unordered: 8.60760807991
ordered: 5.1214389801
我在 ubuntu 精确 x86_64 中使用 Python 2.7.3