В Тим Питер ответит на "Есть ли причины не использовать упорядоченный словарь", говорит он
OrderedDict является подклассом dict.
Это не намного медленнее, но, по крайней мере, удваивает память, используя простой dict.
Теперь, просматривая конкретный вопрос , я попробовал несколько выборочных проверок с помощью ipython
, и оба они противоречат предыдущим аргументам:
- оба
dict
иOrderedDict
имеют одинаковый размер - работающий на
OrderedDict
, занимает около 7-8 раз больше времени, чем работа наdict
(следовательно, намного медленнее).
Может кто-нибудь объяснить мне, где я ошибаюсь в своих рассуждениях?
Создайте большой Dict и OrderedDict и сравните размеры:
import sys
import random
from collections import OrderedDict
test_dict = {}
test_ordered_dict = OrderedDict()
for key in range(10000):
test_dict[key] = random.random()
test_ordered_dict[key] = random.random()
sys.getsizeof(test_dict)
786712
sys.getsizeof(test_ordered_dict)
786712
Проверьте время, затраченное на вставку, с помощью %timeit
:
import sys
import random
from collections import OrderedDict
def operate_on_dict(r):
test_dict = {}
for key in range(r):
test_dict[key] = random.random()
def operate_on_ordered_dict(r):
test_ordered_dict = OrderedDict()
for key in range(r):
test_ordered_dict[key] = random.random()
%timeit for x in range(100): operate_on_ordered_dict(100)
100 loops, best of 3: 9.24 ms per loop
%timeit for x in range(100): operate_on_dict(100)
1000 loops, best of 3: 1.23 ms per loop