Как сделать вывод по убыванию

Пишу телеграмм бота и возникла проблема:

У меня есть json файл в котором храниться информация

{"1634031414": {"SHC": "100000", "Price": 10000000}, "1634036422": {"SHC": "2", "Price": 2000}, "1243402562": {"SHC": "1112", "Price": 205500}}

Мне нужно сделать так, что-бы вывод в чате был примерно такой и в 1-ом сообщении:

  1. 1634031414 - SHC 100000 | Price 10000000
  2. 1243402562 - SHC 1112 | Price 205500
  3. 1634036422 - SHC 2 | Price 2000

(оформление вывода не важно, это просто пример)

Что бы я не пробовал, ничего не получалось(высвечивалась ошибка), либо выводились просто json строка в таком виде, в каком она и была изначально.


Ответы (1 шт):

Автор решения: Sergey K.

Следующий пример спарсит JSON в Python-объект и отсортирует все поля в порядке убывания цены, то есть, поля Price.

import json

json_data = '{"1634031414": {"SHC": "100000", "Price": 10000000}, "1634036422": {"SHC": "2", "Price": 2000}, "1243402562": {"SHC": "1112", "Price": 205500}}'
data = json.loads(json_data)

sorted_data = sorted(data.items(), key=lambda x: x[1]['Price'], reverse=True)
print(sorted_data)

Вывод:
[('1634031414', {'SHC': '100000', 'Price': 10000000}), ('1243402562', {'SHC': '1112', 'Price': 205500}), ('1634036422', {'SHC': '2', 'Price': 2000})]

Если же нужно вывести в формате как в Вашем примере, то пройдёмся в цикле и зададим нужный вид:

for i, row in enumerate(sorted_data):
    print(f'{i}. {row[0]} - SHC {row[1]["SHC"]} | Price {row[1]["Price"]}')

Вывод:

0. 1634031414 - SHC 100000 | Price 10000000
1. 1243402562 - SHC 1112 | Price 205500
2. 1634036422 - SHC 2 | Price 2000
→ Ссылка