В python, как заказать dict с содержимым в юникоде?

#python #dictionary #python-unicode #ordereddictionary

#python #словарь #python-юникод #ordereddictionary

Вопрос:

У меня есть следующий dict:

 <type 'dict'>
{u'010-010': u'010-010_comp_v000', u'012-010': u'012-010_comp_v002', u'007-010': u'007-010_comp_v000', u'006-010': u'006-010_comp_v009', u'005-010': u'005-010_comp_v002'}
 

Я хочу упорядочить его по ключам. Но, используя Collections и OrderedDict, я не могу заставить его работать.

 OrderedDict([(u'010-010', u'010-010_comp_v000'), (u'012-010', u'012-010_comp_v002'), (u'007-010', u'007-010_comp_v000'), (u'006-010', u'006-010_comp_v009'), (u'005-010', u'005-010_comp_v002')])
 

Я предполагаю, что он связан с Unicode? Есть ли решение исправить это без необходимости переписывать dict? Это вывод другого программного обеспечения, поэтому я не могу легко изменить тип.

Желаемый результат: '005-010'... '006-010'... '007-010'...

Ответ №1:

OrderDict s сохраняют порядок вставки — они не сортируют элементы для вас. Вам нужно будет отсортировать их самостоятельно:

 d = {u'010-010': u'010-010_comp_v000', u'012-010': u'012-010_comp_v002', u'007-010': u'007-010_comp_v000', u'006-010': u'006-010_comp_v009', u'005-010': u'005-010_comp_v002'}
o = OrderedDict((k, v) for k, v in sorted(d.items()))
print(o)
 

Комментарии:

1. @ScottHunter: Смысл в том, чтобы сохранить порядок вставки. ( u Префиксы говорят, что это почти наверняка версия Python, в которой dict этого не делается.)

2. OP сказал: «Я хочу упорядочить его по ключам», так что, может быть. Посмотрим, это ли то, что они ищут…

3. Это именно то, что я искал. Спасибо!