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
相关产品推荐
相关产品推荐

