Сортировать вложенный словарь python

#python #python-3.x #dictionary

#python #python-3.x #словарь

Вопрос:

Как отсортировать вложенные элементы словаря python по их вложенным значениям и сохранить эти элементы словаря в порядке убывания
, описывающем словарь_____

Перед сортировкой

     dict={
          "Bob": {"Buy": 25, "Sell": 33, "Quantity": 100}
          "Moli": {"Buy": 75, "Sell": 53, "Quantity": 300}
          "Annie": {"Buy": 74, "Sell": 83, "Quantity": 96}
          "Anna": "Buy": 55, "Sell": 83, "Quantity": 154}
         }
  

Я хочу отсортировать элементы словаря в порядке убывания по их вложенным значениям (т.Е. «Количество»), и результат должен быть таким:—-

После сортировки

     dict={
          "Moli": {"Buy": 75, "Sell": 53, "Quantity": 300}
          "Anna": "Buy": 55, "Sell": 83, "Quantity": 154}
          "Bob": {"Buy": 25, "Sell": 33, "Quantity": 100}
          "Annie": {"Buy": 74, "Sell": 83, "Quantity": 96}
         }
  

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

1. Вы не можете сортировать словари.

Ответ №1:

Я рекомендую извлечь отсортированные ключи, а затем создать новый словарь.

 def sort_by_quantity(dic):
  keys = sorted(dic.items(), key=lambda x: x[1]['Quantity']) # list of sorted keys
  return dict((x, y) for x, y in keys) # convert tuple back to dict
  

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

1. Из примера видно, что OP хочет, чтобы порядок уменьшался, поэтому я думаю, вам нужно использовать -x[1]['Quantity'] или добавить reverse=True . Кроме того, я думаю, вы можете просто вернуться dict(sorted(dic.items(), key=lambda x: -x[1]['Quantity'])) прямо вверх.

2. Обратите внимание, что это будет работать для Python 3.6 , потому что это гарантирует сохранение порядка вставки из этой версии.

Ответ №2:

Вы можете попробовать это:

 dictt={"Bob": {"Buy": 25, "Sell": 33, 
"Quantity": 100},"Moli": {"Buy": 75, "Sell": 53, 
"Quantity": 300},"Annie": {"Buy": 74, "Sell": 83, "Quantity": 96}, 
"Anna": {"Buy": 55, "Sell": 83, "Quantity": 154}
}
sdct = dictt.copy()
def func(d):
    `return sdct[d]['Quantity']
dct = sorted(dictt, key=func, reverse=True)
newDict = {i: dictt[i] for i in dct}
print(newDict)
  

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

1. Обратите внимание, что это будет работать для Python 3.6 , потому что это гарантирует сохранение порядка вставки из этой версии