Tôi đã tạo ra các dicts lớn (hàng triệu mục) và tôi đã nhận thấy rằng nếu tôi tạo chúng bằng các phím để nó nhanh hơn nhiều.Tại sao chèn các phím vào thứ tự python dict nhanh hơn doint nó không có thứ tự
Tôi tưởng tượng rằng nó có liên quan đến va chạm với hàm băm, nhưng ai đó có thể giải thích tại sao nó xảy ra và nếu nó nhất quán giữa các phiên bản của python?
Ở đây bạn có một ví dụ nhân tạo:
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)
Sản lượng trong máy của tôi luôn là:
(X)$ python /tmp/test.py
unordered: 8.60760807991
ordered: 5.1214389801
Tôi đang sử dụng Python 2.7.3 trong Ubuntu x86_64 chính xác
Có thể liên quan: [Tại sao xử lý mảng được sắp xếp nhanh hơn mảng chưa được sắp xếp?] (Http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster- hơn một mảng không phân loại) –
Có thể có liên quan nhưng chúng ta nên có một cái nhìn để thực hiện C của dict – barracel