Python按值降序对嵌套字典排序

时间:2019-04-19 16:29:51

标签: python python-3.x sorting dictionary

我有一本字典,看起来像这样

{
'Host-A': {'requests': 
    {'GET /index.php/dashboard HTTP/1.0': {'code': '200', 'hit_count': 3},
     'GET /index.php/cronjob HTTP/1.0': {'code': '200', 'hit_count': 4},
     'GET /index.php/setup HTTP/1.0': {'code': '200', 'hit_count': 2}},
'total_hit_count': 9},
}

您可以看到'Host-A'的值是一个dict,其中包含收到的请求和每一页的点击数。.问题是如何按降序对'requests'进行排序。这样我就可以获得最重要的请求。

正确的解决方案输出示例如下:

{
'Host-A': {'requests':
    {'GET /index.php/cronjob HTTP/1.0': {'code': '200', 'hit_count': 4},
     'GET /index.php/dashboard HTTP/1.0': {'code': '200', 'hit_count': 3},
     'GET /index.php/setup HTTP/1.0': {'code': '200', 'hit_count': 2}},
'total_hit_count': 9},
}

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

假设您使用的是Python 3.7+,保留了字典键的顺序,并且将字典存储在变量d中,则可以使用以下命令对d['Host-A']['requests']子字典的项进行排序:一个键函数,该键函数返回给定元组第二个项目中子字典的hit_count值,然后将结果的排序后的项目序列传递给dict构造函数以构建新的排序后的dict:

d['Host-A']['requests'] = dict(sorted(d['Host-A']['requests'].items(), key=lambda t: t[1]['hit_count'], reverse=True))