Как правильно инициализировать упорядоченный словарь (OD), чтобы он сохранял порядок исходных данных?
from collections import OrderedDict
# Obviously wrong because regular dict loses order
d = OrderedDict({'b':2, 'a':1})
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b',2), ('a', 1)])
# What about using a list comprehension, will 'd' preserve the order of 'l'
l = ['b', 'a', 'c', 'aa']
d = OrderedDict([(i,i) for i in l])
Вопрос:
Будет ли
OrderedDict
сохранен порядок списка кортежей, кортежа кортежей или кортежа списков или списка списков и т.д., переданных во время инициализации (2-й и 3-й примеры выше)?Как можно проверить,
OrderedDict
действительно ли поддерживается заказ? Поскольку adict
имеет непредсказуемый порядок, что, если мои тестовые векторы, к счастью, имеют тот же начальный порядок, что и непредсказуемый порядок dict? Например, если вместо того, чтобыd = OrderedDict({'b':2, 'a':1})
писатьd = OrderedDict({'a':1, 'b':2})
, я могу ошибочно сделать вывод, что порядок сохраняется. В этом случае я обнаружил, что adict
упорядочен по алфавиту, но это может быть не всегда так. Какой надежный способ использовать контрпример для проверки того, сохраняет ли структура данных порядок или нет, кроме многократных попыток тестовых векторов, пока один из них не сломается?
PS Я просто оставлю это здесь для справки : «Конструктор OrderedDict и метод update () оба принимают аргументы ключевого слова, но их порядок теряется, потому что аргументы ключевого слова передачи семантики функции Python используют обычный неупорядоченный словарь»
PPS: Надеюсь, что в будущем OrderedDict также сохранит порядок kwargs (пример 1): http://bugs.python.org/issue16991