无法对 discord.py 中的字典进行排序

can't sort dictionary in discord.py

{"user1": {"wallet": 45253, "bank": 4563}, "user2": {"wallet": 46212, "bank": 8462}, "user3": {"wallet": 96343, "bank": 6944}, "user4": {"wallet": 6946, "bank": 4593}, "user5": {"wallet": 4354, "bank": 13445}, "user6": {"wallet": 1134, "bank": 456364}}

我正在制作一个 discord 机器人,我想制作排行榜,但我无法按银行价值对这本字典进行排序,我尝试了 sorted_data = {k: v for k, v in sorted(data.items(), reverse=True ,key=lambda item: item[1]["bank"])},但该值只是一个包含钱包的字符串和银行

data = {"user1": {"wallet": 45253, "bank": 4563}, "user2": {"wallet": 46212, "bank": 8462}, "user3": {"wallet": 96343, "bank": 6944}, "user4": {"wallet": 6946, "bank": 4593}, "user5": {"wallet": 4354, "bank": 13445}, "user6": {"wallet": 1134, "bank": 456364}}


sorted(data.items(), key = lambda x: x[1]['bank'])
##output
[('user1', {'bank': 4563, 'wallet': 45253}),
 ('user4', {'bank': 4593, 'wallet': 6946}),
 ('user3', {'bank': 6944, 'wallet': 96343}),
 ('user2', {'bank': 8462, 'wallet': 46212}),
 ('user5', {'bank': 13445, 'wallet': 4354}),
 ('user6', {'bank': 456364, 'wallet': 1134})]

如果你想要一个 dict gust 包装它

dict(sorted(data.items(), key = lambda x: x[1]['bank']))

##output
{'user1': {'bank': 4563, 'wallet': 45253},
 'user2': {'bank': 8462, 'wallet': 46212},
 'user3': {'bank': 6944, 'wallet': 96343},
 'user4': {'bank': 4593, 'wallet': 6946},
 'user5': {'bank': 13445, 'wallet': 4354},
 'user6': {'bank': 456364, 'wallet': 1134}}

解决方案一(结果为数据框):

import pandas as pd

data = {"user1": {"wallet": 45253, "bank": 4563}, "user2": {"wallet": 46212, "bank": 8462}, "user3": {"wallet": 96343, "bank": 6944}, "user4": {"wallet": 6946, "bank": 4593}, "user5": {"wallet": 4354, "bank": 13445}, "user6": {"wallet": 1134, "bank": 456364}}
pd.DataFrame(data).transpose().sort_values('bank', ascending=False)

解法二(字典结果):

import pandas as pd

data = {"user1": {"wallet": 45253, "bank": 4563}, "user2": {"wallet": 46212, "bank": 8462}, "user3": {"wallet": 96343, "bank": 6944}, "user4": {"wallet": 6946, "bank": 4593}, "user5": {"wallet": 4354, "bank": 13445}, "user6": {"wallet": 1134, "bank": 456364}}
df = pd.DataFrame(data).transpose().sort_values('bank', ascending=False)

sorted_data = {}
for i in df.index:
    sorted_col = {}
    for j in df.columns:
        sorted_col[j] = df.loc[i][j]
    sorted_data[i] = sorted_col

sorted_data

也许它不是直接的,但数据框是排序、过滤和对数据进行一般操作的好工具。