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

如何过滤Python字典列表并提取指定键的嵌套值?

提取字典列表中指定键的嵌套值并格式化输出

需求说明

给定如下Python字典列表:

resp = [
    {
        'meter_id': {'S': 'M#G000140'},
        'meter_reading_reader': {'S': 'Meyer'},
        'meter_reading_date': {'S': '2021-12-21T12:00:00'},
        'item_type': {'S': 'READING'},
        'meter_reading_value': {'S': '225'},
        'meter_reading_unit': {'S': 'cbm'},
        'meter_kind': {'S': 'Gas'},
        'month': {'S': 'December'},
        'year': {'S': '2021'},
        'SK': {'S': 'MPID#P-00002-01-MG-001'},
        'building_id': {'S': 'B#BUI-00001'},
        'PK': {'S': 'READ#G000140#2021#Dec'},
        'meter_serial_number': {'S': '7GMT0008942175'}
    },
    {
        'meter_id': {'S': 'M#G000155'},
        'meter_reading_reader': {'S': 'Meyer'},
        'meter_reading_date': {'S': '2022-02-28T12:00:00'},
        'item_type': {'S': 'READING'},
        'meter_reading_value': {'S': '45'},
        'meter_reading_unit': {'S': 'cbm'},
        'meter_kind': {'S': 'Gas'},
        'month': {'S': 'February'},
        'year': {'S': '2022'},
        'SK': {'S': 'MPID#P-00002-01-MG-001'},
        'building_id': {'S': 'B#BUI-00001'},
        'PK': {'S': 'READ#G000155#2022#Feb'},
        'meter_serial_number': {'S': '7GMT0008942175'}
    }
]

需要过滤该列表,仅保留meter_reading_date和meter_reading_value两个键值对,且值为原嵌套字典中'S'对应的内容,最终输出格式如下:

{
    'meter_reading_date': '2021-12-21T12:00:00',
    'meter_reading_value': '225'
},
{
    'meter_reading_date': '2022-02-28T12:00:00',
    'meter_reading_value': '45'
},

解决方案

方法一:循环构建新字典

遍历原列表,逐个提取目标键的嵌套值,构建新字典并加入结果列表:

# 初始化结果列表
result = []
for item in resp:
    # 提取指定键的'S'值,构建目标字典
    filtered_item = {
        'meter_reading_date': item['meter_reading_date']['S'],
        'meter_reading_value': item['meter_reading_value']['S']
    }
    result.append(filtered_item)

# 按期望格式打印结果
for item in result:
    print("{")
    print(f"    'meter_reading_date': '{item['meter_reading_date']}',")
    print(f"    'meter_reading_value': '{item['meter_reading_value']}'")
    print("},")

方法二:列表推导式(更简洁)

用列表推导式一行生成结果列表,再格式化输出:

# 用列表推导式生成目标列表
result = [
    {
        'meter_reading_date': item['meter_reading_date']['S'],
        'meter_reading_value': item['meter_reading_value']['S']
    }
    for item in resp
]

# 格式化打印,最后一个元素不加逗号
for idx, item in enumerate(result):
    print("{")
    print(f"    'meter_reading_date': '{item['meter_reading_date']}',")
    print(f"    'meter_reading_value': '{item['meter_reading_value']}'")
    print("}" + ("," if idx != len(result)-1 else ""))

方法三:容错处理(避免KeyError)

如果原字典可能缺失目标键或嵌套的'S'键,可添加判断避免报错:

result = []
for item in resp:
    filtered_item = {}
    # 检查键是否存在后再提取
    if 'meter_reading_date' in item and 'S' in item['meter_reading_date']:
        filtered_item['meter_reading_date'] = item['meter_reading_date']['S']
    if 'meter_reading_value' in item and 'S' in item['meter_reading_value']:
        filtered_item['meter_reading_value'] = item['meter_reading_value']['S']
    result.append(filtered_item)

# 打印结果
for item in result:
    print(item)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:03:19