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

如何在Python中使用itemgetter直接提取嵌套字典字段?

解决方案

operator.itemgetter本身不支持直接通过元组(如('nestedDict', 'subfield1'))提取嵌套字典的键——它会把元组当作单个键去目标字典中查找,从而抛出KeyError。不过可以通过以下几种Python风格的一行代码实现需求:

方法1:组合多个itemgetter调用

拆分顶层字段和嵌套字段的提取逻辑,用解包合并结果:

from operator import itemgetter

example_dict = {
    "field1": 1,
    "field2": 2,
    "nestedDict": {
        "subfield1": 3
    }
}

field1, field2, subfield1 = (*itemgetter('field1', 'field2')(example_dict), itemgetter('subfield1')(example_dict['nestedDict']))
print(field1, field2, subfield1)  # 输出:1 2 3

方法2:用functools.reduce链式处理嵌套键

借助reduce把嵌套键序列逐个传入itemgetter,实现深层提取:

from operator import itemgetter
from functools import reduce

example_dict = {
    "field1": 1,
    "field2": 2,
    "nestedDict": {
        "subfield1": 3
    }
}

field1, field2, subfield1 = (
    itemgetter('field1')(example_dict),
    itemgetter('field2')(example_dict),
    reduce(itemgetter, ('nestedDict', 'subfield1'), example_dict)
)
print(field1, field2, subfield1)  # 输出:1 2 3

方法3:用lambda函数直接实现

如果不需要依赖itemgetter,可以用一行lambda完成所有提取:

example_dict = {
    "field1": 1,
    "field2": 2,
    "nestedDict": {
        "subfield1": 3
    }
}

field1, field2, subfield1 = (lambda d: (d['field1'], d['field2'], d['nestedDict']['subfield1']))(example_dict)
print(field1, field2, subfield1)  # 输出:1 2 3

以上几种方式都符合Python简洁的风格,前两种保留了itemgetter的使用场景,第三种则是最直接的一行实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:45:30