can't sort dictionary in discord.py

Viewed 78
{"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}}

I'm making a discord bot and i wanted to make leaderboard but i'm not able to sort this dictionary by the bank value, i tried sorted_data = {k: v for k, v in sorted(data.items(), reverse=True ,key=lambda item: item[1]["bank"])} but the value is just a string with the wallet and the bank

2 Answers
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})]

if you want a dict gust wrap it

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}}

Solution one (result as dataframe):

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)

Solution two (result as dictionary):

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

Maybe it's not direct, but dataframes are great tools to sort, filter and generally operate on data.

Related