排行榜显示相同的用户名,即使它们是不同的用户(如果它们具有相同的值)。 我不知道如何解决这个问题,但是当我在代码中要求抵抗一个变量时,它只给我3个元素,即使有4个元素也没有给我4个元素。 required
代码:
@client.command(aliases = ["lb"])
async def leaderboard(ctx,x = 10):
leader_board = {}
total = []
for user in economy_system:
name = int(user)
total_amount = economy_system[user]["wallet"] + economy_system[user]["bank"]
leader_board[total_amount] = name
total.append(total_amount)
print(leader_board)
total = sorted(total,reverse=True)
embed = discord.Embed(
title = f"Top {x} Richest People",
description = "This is decided on the basis of raw money in the bank and wallet",
color = 0x003399
)
index = 1
for amt in total:
id_ = leader_board[amt]
member = client.get_user(id_)
name = member.name
print(name)
embed.add_field(
name = f"{index}. {name}",
value = f"{amt}",
inline = False
)
if index == x:
break
else:
index += 1
await ctx.send(embed=embed)
印刷品对此表示反对:
{100: 523967502665908227, 350: 554617490806800387, 1100: 350886488235311126}
Padre Mapper
Flore (Orsolinismo)
Aetna
Aetna
理论上也应该有100: 488826524791734275
(即我的用户ID),但是找不到。
答案 0 :(得分:0)
您的问题来自此行:
leader_board[total_amount] = name
如果total_amount
已经是一个密钥(例如,两个用户拥有相同的金额),它将替换之前的值(这是一个用户ID),并用另一个用户ID替换它。在这种情况下,如果多个用户拥有相同的金额,则leader_board
中将只保存一个。
然后,您有以下一行:
total.append(total_amount)
在这种情况下,如果两个用户拥有相同的金额,则您将只有两个相同的值,这是正常的,但是考虑到上述问题,这将造成转移。
假设您有十个用户,其中两个拥有相同金额。 leader_board
仅包含9个项目,而total
将包含10个值。这就是为什么您的消息中有两个同名的原因。
要解决此问题:
@client.command(aliases = ["lb"])
async def leaderboard(ctx, x=10):
d = {user_id: info["wallet"] + info["bank"] for user_id, info in economy_system.items()}
leaderboard = {user_id: amount for user_id, amount in sorted(d.items(), key=lambda item: item[1], reverse=True)}
embed = discord.Embed(
title = f"Top {x} Richest People",
description = "This is decided on the basis of raw money in the bank and wallet",
color = 0x003399
)
for index, infos in enumerate(leaderboard.items()):
user_id, amount = infos
member = client.get_user(user_id)
embed.add_field(
name = f"{index}. {member.display_name}",
value = f"{amount}",
inline = False
)
await ctx.send(embed=embed)
如果我猜对了,而您的词典是这样组织的,它应该可以工作:
economy_system = {
user_id: {"bank": x, "wallet": y}
}