You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于内层字典值的和(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函数改成:
    lambda x: x['s'].get('a', 0) + x['s'].get('b', 0) + x['s'].get('c', 0)
    
    这样就算某个键不存在,会默认取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:04