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

Python处理YAML字典:按类型/Flag筛选数据名称报错求助

解决Python处理YAML数据的报错与筛选问题

先给你说清楚报错的原因:

  • 你写的x = raw_data.items()是把整个解析后的字典键值对取出来,得到的dict_items是可迭代对象,但不能用下标(比如x['data'])访问,这就是TypeError: 'dict_items' object is not subscriptable的根源。
  • 另外,raw_data['data']是个字典,你用range(len(x['data']))按索引遍历的方式也是错误的,字典不支持这种遍历逻辑。

正确的处理代码

先确保已经安装PyYAML库(执行pip install pyyaml),然后用下面的逻辑处理:

import yaml

# 解析YAML数据(如果是从文件读取就用下面的方式,也可以直接传入YAML字符串)
with open('你的YAML文件路径.yaml', 'r') as f:
    raw_data = yaml.safe_load(f)

# 存储符合条件的数据名称
filtered_names = []
# 直接遍历data字典的键值对:name是数据名称(data1/data2/data3),attrs是对应的属性字典
for name, attrs in raw_data['data'].items():
    # 筛选条件:type为bool或float,或者flag是布尔值(True/False)
    type_ok = attrs.get('type') in ['bool', 'float']
    flag_ok = isinstance(attrs.get('flag'), bool)
    if type_ok or flag_ok:
        filtered_names.append(name)

# 输出结果
print("符合条件的数据名称:", filtered_names)

代码说明

  • 直接遍历raw_data['data'].items(),就能拿到每个数据的名称和属性字典,不用搞复杂的索引操作。
  • 用attrs.get('key')的方式获取属性,避免属性不存在时抛出KeyError,更安全。
  • 如果你需要的是flag为True或者flag为False的特定情况,把flag_ok改成attrs.get('flag') is True或者attrs.get('flag') is False就行,灵活调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:41:02