Dicts "официально" поддерживаются в порядке вставки, начиная с 3.7. Они были так заказаны в 3.6, но до 3.7 это не было гарантировано. До версии 3.6 вы ничего не можете сделать, чтобы повлиять на порядок появления ключей.
Но вместо этого можно использовать OrderedDict
. Я не понимаю ваше возражение "но оно дает мне список" - я не вижу никакого смысла, в котором это действительно так.
Ваш пример:
>>> from collections import OrderedDict
>>> d = OrderedDict([('item', 'book'), ('pages', 200),
... ('weight', 1.0), ('price', 25),
... ('city', 'London')])
>>> d # keeps the insertion order
OrderedDict([('item', 'book'), ('pages', 200), ('weight', 1.0), ('price', 25), ('city', 'London')])
>>> key_order= ['city', 'pages', 'item', 'weight', 'price'] # the order you want
>>> for k in key_order: # a loop to force the order you want
... d.move_to_end(k)
>>> d # which works fine
OrderedDict([('city', 'London'), ('pages', 200), ('item', 'book'), ('weight', 1.0), ('price', 25)])
Не смущайтесь форматом вывода! d
- это , отображаемый в виде списка пар, переданный конструктору OrderedDict
, для ясности. d
сам по себе не является списком.