Как сделать leaderboard с бд json? discord.py
Я пытаюсь сделать топ 10 по монетам в своем боте. Я не знаю как это можно сделать, поэтому я обратился сюда, я не пытался что-либо писать просто я не знаю как и что. Так вот. У меня монеты юзера - это money["тут айди пользователя"]["тут кол-во монет"]. Кто не понял:
{"676744847844897979": 0, "5465756846894984": 10}
И мне нужно вывести топ 10 от самого большого до самого маленького. Помогите пожалуйста, я новичок в этом деле.
Ответы (1 шт):
Автор решения: denisnumb
→ Ссылка
Как вариант, можно произвести сортировку путем перебора элементов словаря.
Как итог, получим новый словарь top, значения и ключи в котором будут отсортированы.
import json
money = {
"id0": 38,
"id1": 128,
"id2": 184,
"id3": 32,
"id4": 30,
"id5": 16,
"id6": 185,
"id7": 146,
"id8": 53,
"id9": 196
}
top_values = []
top_ids = []
top = {}
for id in money:
top_values.append(money[id])
top_ids.append(id)
for i in range(len(top_values)):
for j in range(len(top_values)):
if top_values[i] > top_values[j]:
temp = top_values[i]
top_values[i] = top_values[j]
top_values[j] = temp
temp = top_ids[i]
top_ids[i] = top_ids[j]
top_ids[j] = temp
for i in range(len(top_values)):
if i < 10:
top[top_ids[i]] = top_values[i]
print(json.dumps(top, ensure_ascii = False, indent = 4))
Вывод:
{
"id9": 196,
"id6": 185,
"id2": 184,
"id7": 146,
"id1": 128,
"id8": 53,
"id0": 38,
"id3": 32,
"id4": 30,
"id5": 16
}
Код можно улучшить или сократить, но эта версия тоже неплохо работает