如何基于内层字典值的和(a+b+c)对字典列表进行排序?
按内层字典值总和排序字典列表的解决方案
没问题,要实现这个需求其实很简单,Python内置的sorted()函数就能轻松搞定,咱们直接看代码实现:
d2 = [ {'id': 255, 's': {'a': 50, 'b': 60, 'c': 0}}, {'id': 257, 's': {'a': 100, 'b': 10, 'c': 0}}, {'id': 285, 's': {'a': 20, 'b': 10, 'c': 0}} ] # 按s中a+b+c的总和升序排序(从小到大) sorted_d2_asc = sorted(d2, key=lambda x: x['s']['a'] + x['s']['b'] + x['s']['c']) # 如果需要降序排序(从大到小),只需添加reverse=True参数 sorted_d2_desc = sorted(d2, key=lambda x: x['s']['a'] + x['s']['b'] + x['s']['c'], reverse=True) print("升序排序结果:", sorted_d2_asc) print("降序排序结果:", sorted_d2_desc)
关键细节说明
sorted()的key参数是核心:它接受一个函数,用来定义排序的依据。这里用匿名函数lambda x指代列表里的每个字典元素,直接计算x['s']中a、b、c三个值的总和作为排序key。- 灵活切换排序方向:默认是升序,加
reverse=True就能改成降序,完全不用改核心的计算逻辑。 - 容错优化(可选):如果担心某些元素的
s字典里可能缺失a/b/c键,可以用get()方法避免报错,比如把key函数改成:
这样就算某个键不存在,会默认取0,程序不会抛出lambda x: x['s'].get('a', 0) + x['s'].get('b', 0) + x['s'].get('c', 0)KeyError。
输出示例
升序排序后的结果(按总和从小到大):
[{'id': 285, 's': {'a': 20, 'b': 10, 'c': 0}}, {'id': 255, 's': {'a': 50, 'b': 60, 'c': 0}}, {'id': 257, 's': {'a': 100, 'b': 10, 'c': 0}}]
降序排序后的结果(按总和从大到小):
[{'id': 257, 's': {'a': 100, 'b': 10, 'c': 0}}, {'id': 255, 's': {'a': 50, 'b': 60, 'c': 0}}, {'id': 285, 's': {'a': 20, 'b': 10, 'c': 0}}]
内容的提问来源于stack exchange,提问作者Ashish siwalkar
相关产品推荐
相关产品推荐

