Сортировать по ключу словаря внутри словаря в Python - PullRequest
4 голосов
/ 10 марта 2010

Как отсортировать следующий словарь по значению «Остаток_шт.» Или «Скидка_расчет»?

promotion_items = {
    'one': {'remaining_pcs': 100, 'discount_ratio': 10},
    'two': {'remaining_pcs': 200, 'discount_ratio': 20},
}

EDIT

Я имею в виду получение отсортированного списка вышеупомянутого словаря, а не сортировку самого словаря.

Ответы [ 3 ]

5 голосов
/ 10 марта 2010

Вы можете только отсортировать ключи (или элементы или значения) словаря в отдельный список (как я писал много лет назад в рецепте, который цитирует @ Эндрю). Например, для сортировки ключей по заданным вами критериям:

promotion_items = {
    'one': {'remaining_pcs': 100, 'discount_ratio': 10},
    'two': {'remaining_pcs': 200, 'discount_ratio': 20},
}
def bypcs(k):
  return promotion_items[k]['remaining_pcs']
byrempcs = sorted(promotion_items, key=bypcs)
def bydra(k):
  return promotion_items[k]['discount_ratio']
bydiscra = sorted(promotion_items, key=bydra)
2 голосов
/ 10 марта 2010

Смотри Для сортировки словаря :

Словари не могут быть отсортированы - картографирование не имеет порядка! -- так когда вы чувствуете необходимость сортировать один, вы нет сомневаюсь хочу отсортировать ключи (в отдельный список).

0 голосов
/ 10 марта 2010

Если 'remaining_pcs' и 'discount_ratio' являются единственными ключами во вложенных словарях, то:

result = sorted(promotion_items.iteritems(), key=lambda pair: pair[1].items())

Если могут быть другие ключи, тогда:

def item_value(pair):
    return pair[1]['remaining_pcs'], pair[1]['discount_ratio']
result = sorted(promotion_items.iteritems(), key=item_value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...