You need to enable JavaScript to run this app. Python如何从嵌套混合结构列表中按键名提取字典字段值
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从嵌套混合结构列表中按键名提取字典字段值

核心问题原因

你当前遇到的访问失败是两个基础操作问题叠加导致的:

  • 你把整个混合了列表、字典、零散基础值的外层列表赋值给了变量dict,此时这个变量指向的是列表对象,而非字典,列表本身没有实现.get()方法,直接调用dict.get('duration')必然触发AttributeError类型错误
  • 你拿到的不是单一字典结构,是嵌套层级混乱的混装列表,需要按层级拆解访问,不能跨层级直接取键值
现有结构拆解

基于你给出的列表内容,外层列表每个索引对应的存储内容是固定的:

  • 索引0:嵌套列表,内部仅包含1个视频流信息字典,字典内直接存在duration字段
  • 索引1:格式元信息字典,字典内直接存在duration字段
  • 索引2及之后:零散的基础类型值(整数、浮点数、字符串、空字典),不存在字典结构,自然没有可访问的duration键
具体访问方法

1. 精准定位取值(已知固定结构时使用)

因为结构层级固定,直接按索引层级取值即可:

  • 取视频流信息中的duration值:外层列表对象[0][0]['duration']
    • 取值逻辑:先取外层列表第0项(装着视频流信息的嵌套列表),再取嵌套列表第0项(视频流信息字典),最后按键名读取duration对应的值
  • 取格式元信息中的duration值:外层列表对象[1]['duration']
    • 取值逻辑:直接取外层列表第1项(格式信息字典),按键名读取duration对应的值

2. 通用遍历取值(结构动态变化时使用)

如果后续嵌套结构有调整,不想手动逐个数索引位置,可以用递归遍历的方式自动找全所有duration对应的字段值,示例代码:

def find_all_key_values(target, target_key, collect_list=None):
    # 初始化收集列表,规避可变默认参数的隐性问题
    if collect_list is None:
        collect_list = []
    # 遇到字典结构先检查是否存在目标键
    if isinstance(target, dict):
        if target_key in target:
            collect_list.append(target[target_key])
        # 字典内的所有值继续递归查找
        for value in target.values():
            find_all_key_values(value, target_key, collect_list)
    # 遇到列表/元组结构逐元素递归查找
    elif isinstance(target, (list, tuple)):
        for item in target:
            find_all_key_values(item, target_key, collect_list)
    return collect_list

# 调用方式:把你转好的列表传进去,即可拿到所有匹配的duration值
all_duration_values = find_all_key_values(你的列表对象, 'duration')
额外注意事项
  • 不要将变量命名为dict,这会覆盖Python内置的字典类型,后续写代码容易出现难以排查的隐性问题,建议换成probe_info、video_meta这类表意明确的变量名
  • 这个破碎的列表结构大概率是之前操作ffprobe返回值时,错误解包、把字段值强行拼接进列表导致的,如果要长期稳定访问字段,建议回到未被拆解的原始返回结构(通常是完整嵌套字典)上取值,不用硬对着拆分后的列表做索引匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 14:36:05