В python как заказать dict с юникодным контентом? - PullRequest
2 голосов
/ 19 апреля 2019

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

<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')])

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

Желаемый вывод: '005-010'... '006-010'... '007-010'...

1 Ответ

3 голосов
/ 19 апреля 2019

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)
...