#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. Это именно то, что я искал. Спасибо!