#python #python-3.9
Вопрос:
У меня есть список, который выглядит так:
ls = [ { "max_supply": None, "platform": None, "quote": { "USD": { "fully_diluted_market_cap": 464800388135.72, "last_updated": "2021-10-20T13:37:02.000Z", "market_cap": 464800388135.7246, "price": 3938.871641392752, "volume_24h": 15411634916.820467, "volume_change_24h": -3.4909 } } }, { "max_supply": None, "platform": None, "quote": { "USD": { "fully_diluted_market_cap": 58764548678.52, "last_updated": "2021-10-20T13:37:03.000Z", "market_cap": 58764548678.52, "price": 4784.77, "volume_24h": 189992412916.647, "volume_change_24h": 85.422 } } }, ]
Как упорядочить данный список по каждому market_cap
значению, расположенному в ключах quote
и USD
?
Я нашел некоторые решения, но они относятся только к сортировке по ключам и значениям словаря первого уровня, однако я не смог найти никаких решений для сортировки по ключам и значениям в двухуровневом словаре. в приведенном списке.
Ответ №1:
Вы можете передать лямбда-функцию в качестве key
аргумента встроенной sorted
функции:
ls = [ { "max_supply": None, "platform": None, "quote": { "USD": { "fully_diluted_market_cap": 464800388135.72, "last_updated": "2021-10-20T13:37:02.000Z", "market_cap": 464800388135.7246, "price": 3938.871641392752, "volume_24h": 15411634916.820467, "volume_change_24h": -3.4909 } } }, { "max_supply": None, "platform": None, "quote": { "USD": { "fully_diluted_market_cap": 58764548678.52, "last_updated": "2021-10-20T13:37:03.000Z", "market_cap": 58764548678.52, "price": 4784.77, "volume_24h": 189992412916.647, "volume_change_24h": 85.422 } } }, ] sorted_ls = sorted(ls, key=lambda obj: obj["quote"]["USD"]["market_cap"])
Кроме того, вы можете использовать этот .sort()
метод, если хотите отредактировать список на месте.
Комментарии:
1. Спасибо, это сработало! Я просто добавил
reverse=True
опцию вsorted()
метод, и это сработало как заклинание, сортируя от самого высокого к самому низкому.
Ответ №2:
Вы можете определить свою собственную функцию, которая возвращает ключ для сортировки, а затем использовать sort
его следующим образом
all_data = [ { "max_supply": null, "platform": null, "quote": { "USD": { "fully_diluted_market_cap": 464800388135.72, "last_updated": "2021-10-20T13:37:02.000Z", "market_cap": 464800388135.7246, "price": 3938.871641392752, "volume_24h": 15411634916.820467, "volume_change_24h": -3.4909 } } }, { "max_supply": null, "platform": null, "quote": { "USD": { "fully_diluted_market_cap": 58764548678.52, "last_updated": "2021-10-20T13:37:03.000Z", "market_cap": 58764548678.52, "price": 4784.77, "volume_24h": 189992412916.647, "volume_change_24h": 85.422 } } }, ] def get_sort_key(current_dict): return current_dict['quote']['USD']['market_cap'] all_data.sort(key=get_sort_key) print(f'Sorted dict: {all_data}')