Сортировать словарь, который содержит список словарей по значению - PullRequest
0 голосов
/ 23 мая 2019

У меня есть словарь следующего формата:

{"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
"key2": [{"title":"bla bla", "percentage": "0.635"},{"title":"bla bla bla", "percentage":"0.987"}]}

Так что в основном это словарь, который содержит списки словарей в качестве значений.

Я хочу отсортировать это в порядке убывания по процентному полю - поэтому в приведенном выше примере я хотел бы получить:

{"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
"key2": [{"title":"bla bla bla", "percentage": "0.987"},{"title":"bla bla", "percentage":"0.635"}]}

Я также хотел бы получить общее представление осамые высокие проценты.Например:

  1. "key2": {"title": "bla bla bla", "процент": "0,987"}

  2. "key2": {"title": "bla bla", "процент": "0.635"}

  3. "key1": {"title": "bla bla", "процент":" 0.3493 "}

  4. " key1 ": {" title ":" bla bla bla "," процент ":" 0.293 "}

Я имеюизучал различные способы сортировки в Python, но я до сих пор не уверен, как этого добиться.

1 Ответ

4 голосов
/ 23 мая 2019

Мы сортируем список значений для каждого ключа в словаре по значению для ключа percentage в порядке убывания, а затем используем словарное понимание, чтобы воссоздать словарь

dct = {"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
"key2": [{"title":"bla bla", "percentage": "0.635"},{"title":"bla bla bla", "percentage":"0.987"}]}

result = {key: sorted(value, key=lambda x:x['percentage'], reverse=True) for key, value in dct.items()}
print(result)

Вывод будет

{'key1': [{'title': 'bla bla', 'percentage': '0.3493'}, 
{'title': 'bla bla bla', 'percentage': '0.293'}], 
'key2': [{'title': 'bla bla bla', 'percentage': '0.987'}, 
{'title': 'bla bla', 'percentage': '0.635'}]}

Для глобального представления мы сначала обновляем внутренние словари, чтобы у нас там был атрибут key.Затем мы создаем общий список значений (глобальное представление), объединяя весь список значений, а затем сортируя их по процентам в порядке убывания

dct = {"key1": [{"title":"bla bla", "percentage": "0.3493"},{"title":"bla bla bla", "percentage":"0.293"}],
"key2": [{"title":"bla bla", "percentage": "0.635"},{"title":"bla bla bla", "percentage":"0.987"}]}

#Update inner dictionaries with the name of the key for each dictionary
for key, value in dct.items():
    for v in value:
        v.update({'key':key})

global_view = sorted([v for value in dct.values() for v in value], key=lambda x:x['percentage'], reverse=True)

print(global_view)

Вывод здесь будет

[
{'title': 'bla bla bla', 'percentage': '0.987', 'key': 'key2'}, 
{'title': 'bla bla', 'percentage': '0.635', 'key': 'key2'}, 
{'title': 'bla bla', 'percentage': '0.3493', 'key': 'key1'}, 
{'title': 'bla bla bla', 'percentage': '0.293', 'key': 'key1'}
]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...