Сортировка словаря Python на основе ключей, содержащих буквенно-цифровое значение

Я новичок в питоне. В Python я хочу сортировать элементы словаря на основе буквенно-цифровых ключей.

Фрагмент кода выглядит следующим образом:

items={'100 kg': u"apple", '500 kg': u"cabbage", '1020 kg': u"banana", '259 GB': u"carrot"}

Я хочу отсортировать его по их количеству в порядке возрастания. Есть ли способ сделать это в Python?

Добавив , я отсортировал словарные ключи, используя предложенную технику. После этого я хочу добавить отсортированный ключ и соответствующее ему значение в другой новый словарь, чтобы я мог получить словарь отсортированным образом, но новый словарь не хранит данные в том порядке, в котором я вставляю.

Итак, для этого я использовал orderDict Python.

Для этого я использую код как:

import collections

items={'100 kg': u"apple", '500 kg': u"cabbage", '1020 kg': u"banana", '259 kg': u"carrot"}
sorted_keys = sorted(items, key = lambda x : int(x.split()[0]))
sorted_capacity = collections.OrderedDict()
for j in sorted_keys:
    for i in items:
        if j == i:
            print i  
            sorted_capacity[j]=items[j]
            break

Здесь я получаю сообщение об ошибке: AttributeError: объект 'module' не имеет атрибута 'OrderedDict'. Что может быть причиной этого?


person beginner    schedule 05.06.2015    source источник
comment
Вам нужен словарь в качестве вывода? Это невозможно, так как словари являются неупорядоченными типами данных.   -  person nu11p01n73R    schedule 05.06.2015
comment
Возможный дубликат stackoverflow .com/questions/17888331/   -  person envy_intelligence    schedule 05.06.2015


Ответы (2)


Вы не можете сортировать словари, так как словари Python неупорядочены.

Все, что вы можете получить, это отсортированный список ключей или значений в виде

>>> items={'100 kg': u"apple", '500 kg': u"cabbage", '1020 kg': u"banana", '259 GB': u"carrot"}
>>> sorted(items, key = lambda x : int(x.split()[0]))
['100 kg', '259 GB', '500 kg', '1020 kg']
person nu11p01n73R    schedule 05.06.2015
comment
вы также не можете логически сортировать килограммы рядом с гигабайтами - person jamylak; 05.06.2015
comment
Я отсортировал словарные ключи, используя описанную выше технику. - person beginner; 08.06.2015

я использовал

отсортировано (элементы, ключ = лямбда x: int (x.split () [0]))

для сортировки ключей моего словаря позже я сохранил ключи и соответствующее значение в orderDict, поскольку он сохраняет порядок, в котором вводится значение.

person beginner    schedule 09.06.2015