【发布时间】:2020-09-11 17:10:12
【问题描述】:
{
"341522422836625408-679072765583556720": {
"experience": 111157,
"level": 34,
"last_message": 1590382008.6055543
},
"692075200690520184-679072765583556720": {
"experience": 51,
"level": 3,
"last_message": 1590373878.9466648
},
"465887722721116162-679072765583556720": {
"experience": 34,
"level": 2,
"last_message": 1590380700.2158434
},
"477106559676317717-679072765583556720": {
"experience": 350,
"level": 5,
"last_message": 1590331947.6997736
},
"377116068994482176-679072765583556720": {
"experience": 20,
"level": 2,
"last_message": 1590329384.397424
},
}
以上是我将用于创建命令的输入数据,其中显示了对服务器最有经验的前 3 名用户。我已经制作了一个命令,让用户 exp 进行打字。现在,代码是:
@client.command()
async def leaderboard(ctx):
with open('users.json', 'r') as f:
user = json.load(f)
guild = str(ctx.guild.id)
users = str(ctx.author.id)
order = {k: v for k, v in sorted(user.items(), key = lambda x: x[1]['experience'], reverse=True)}
await ctx.send(order[str(users + "-" + guild): "experience"])
当前输出为
('', {'experience': experience_count, 'level': level_count, 'last_message': last_message_id})
user.id、guild.id、experience_count、level_count 和 last_message_id 是不同的数字。
如果有人可以帮助我执行命令,那就太好了!我是 python 的初学者,所以代码可能有点混乱或愚蠢。有什么问题可以问我!
【问题讨论】:
-
“user.id、guild.id、experience_count 等”不同的数字是什么意思,还要加上预期的输出
-
例如,('524434170764722178-679072765583556720', {'experience': 343, 'level': 5, 'last_message': 1590381887.0841906})
-
添加预期输出
-
我改了sorted(list(users.items()), key=lambda x: x[1]["experience"], reverse=True)后,错误日志显示有keyerror对于 ctx.send:1
-
试试这个
sorted(user.items(), key = lambda x: x[1]['experience'], reverse=True)。无需将user.items()转换为列表。
标签: python command discord discord.py