首页 > 解决方案 > 按值对包含字典列表的字典进行排序

问题描述

我有以下格式的字典:

{"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”:{“标题”:“bla bla”,“百分比”:“0.635”}

  3. “key1”:{“标题”:“bla bla”,“百分比”:“0.3493”}

  4. “key1”:{“标题”:“bla bla bla”,“百分比”:“0.293”}

我已经研究了 Python 中的各种排序方式,但我仍然不确定如何实现这一点。

标签: pythonlistsortingdictionary

解决方案


我们将字典中每个键的值列表按键的值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'}
]


推荐阅读