Как сделать доску самых больших значений из словаря Discord Python

Рейтинг: 0Ответов: 1Опубликовано: 23.05.2023

У меня есть бот и словарь внутри него. И как бы мне надо сделать доску самых больших значений:

value = {
    "887035720101929040": { # Это ID пользователя
        "balance": 534 # Баланс
    }
}

Это как бы экономический бот, где у тебя есть баланс с деньгами. И мне надо сделать команду !leaderboard где будут самые богатые участники. Проблема в том, что это не список. И тут словарь в словаре и дальше значение. Подскажите пожалуйста как это сделать.

Ответы

▲ 0Принят

Если кратко, то можно использовать sorted с аргументами по ключу и используя reverse=True, например вот так (добавил еще парочку значений в лист, чтобы визуалить):

value = {
    "887035720101929040": {
        "balance": 534
    },
    "123123": {
        "balance": 100
    },
    "321321": {
        "balance": 200
    }
}
sorted_value = dict(sorted(value.items(), key=lambda x: x[1]['balance'], reverse=True))

print(sorted_value)

Вывод:

{'887035720101929040': {'balance': 534},
             '321321': {'balance': 200},
             '123123': {'balance': 100}}

P.S. В вашей задаче предполагается обернуть все это в удобную функцию, на вход которой идет словарь и ключ, например вот так:

def sort_dict_key(dictr, k):
    return dict(sorted(dictr.items(), key=lambda x: x[1][k], reverse=True))