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

如何在Python中按子字典列表的指定值排序字典列表?

按指定列(Age/Salary)排序字典列表

要解决这个问题,我们可以利用Python内置的sorted()函数(或列表的sort()方法),通过自定义排序键提取columns子列表中对应的Age或Salary值,实现精准排序。

方法1:用lambda表达式快速提取值

每个员工的columns列表里包含两个子字典,分别对应Age和Salary,我们可以通过生成器表达式快速定位目标列的值,并转换为整数(避免字符串排序的潜在问题):

按Age升序排序

x = [
    {'id': '1', 'employe_id': 15, 'name': 'John', 'columns': [{'Age': '22', 'class': 'int'}, {'Salary': '2700', 'class': 'int'}]},
    {'id': '2', 'employe_id': 11, 'name': 'Sara', 'columns': [{'Age': '19', 'class': 'int'}, {'Salary': '1800', 'class': 'int'}]},
    {'id': '3', 'employe_id': 12, 'name': 'Anna', 'columns': [{'Age': '34', 'class': 'int'}, {'Salary': '3500', 'class': 'int'}]},
]

# 按Age升序排序,返回新列表
sorted_by_age = sorted(x, key=lambda emp: int(next(col['Age'] for col in emp['columns'] if 'Age' in col)))
print(sorted_by_age)

按Salary升序排序

只需要把'Age'替换为'Salary'即可:

# 按Salary升序排序
sorted_by_salary = sorted(x, key=lambda emp: int(next(col['Salary'] for col in emp['columns'] if 'Salary' in col)))
print(sorted_by_salary)

方法2:自定义函数提升可读性

如果觉得lambda表达式不够直观,可以写一个辅助函数来提取列值,代码更易维护:

def get_column_value(employee, column_name):
    # 遍历员工的columns列表,找到目标列的值并转为整数
    for col_dict in employee['columns']:
        if column_name in col_dict:
            return int(col_dict[column_name])
    # 找不到目标列时返回默认值(可根据需求调整)
    return 0

# 原地修改原列表,按Age排序
x.sort(key=lambda emp: get_column_value(emp, 'Age'))
print(x)

这里用了列表的sort()方法,会直接修改原列表;而sorted()会返回新列表,可根据需求选择。

运行结果验证

按Age排序后,输出结果和你预期的一致:

[
    {'id': '2', 'employe_id': 11, 'name': 'Sara', 'columns': [{'Age': '19', 'class': 'int'}, {'Salary': '1800', 'class': 'int'}]},
    {'id': '1', 'employe_id': 15, 'name': 'John', 'columns': [{'Age': '22', 'class': 'int'}, {'Salary': '2700', 'class': 'int'}]},
    {'id': '3', 'employe_id': 12, 'name': 'Anna', 'columns': [{'Age': '34', 'class': 'int'}, {'Salary': '3500', 'class': 'int'}]}
]

关键注意点

  • 必须将字符串类型的年龄/薪资转为整数:如果直接用字符串排序,遇到'100'和'22'时,字符串排序会认为'100' < '22'(因为第一个字符'1' < '2'),不符合数值排序的预期。
  • 如需降序排序,只需给sorted()或sort()加上reverse=True参数,比如sorted(x, key=..., reverse=True)。

内容的提问来源于stack exchange,提问作者er_10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:01:46