我有一个解析为对象的YAML文件,例如:
{'name': [{'proj_directory': '/directory/'},
{'categories': [{'quick': [{'directory': 'quick'},
{'description': None},
{'table_name': 'quick'}]},
{'intermediate': [{'directory': 'intermediate'},
{'description': None},
{'table_name': 'intermediate'}]},
{'research': [{'directory': 'research'},
{'description': None},
{'table_name': 'research'}]}]},
{'nomenclature': [{'extension': 'nc'}
{'handler': 'script'},
{'filename': [{'id': [{'type': 'VARCHAR'}]},
{'date': [{'type': 'DATE'}]},
{'v': [{'type': 'INT'}]}]},
{'data': [{'time': [{'variable_name': 'time'},
{'units': 'minutes since 1-1-1980 00:00 UTC'},
{'latitude': [{'variable_n...
我在访问python中的数据时遇到问题,并定期看到错误
TypeError: list indices must be integers, not str
我希望能够访问与
'name'
对应的所有元素,以便检索每个数据字段,我想它看起来像这样:import yaml
settings_stream = open('file.yaml', 'r')
settingsMap = yaml.safe_load(settings_stream)
yaml_stream = True
print 'loaded settings for: ',
for project in settingsMap:
print project + ', ' + settingsMap[project]['project_directory']
我希望每个元素都可以通过类似
['name']['categories']['quick']['directory']
的方式进行访问更深层次的是:
['name']['nomenclature']['data']['latitude']['variable_name']
还是我在这里完全错了?
最佳答案
方括号[]
表示您有字典列表,而不仅仅是字典。
例如,settingsMap['name']
是字典的列表。
因此,在选择字典中的键之前,需要使用整数索引在列表中选择正确的字典。
因此,给出当前的数据结构,您需要使用:
settingsMap['name'][1]['categories'][0]['quick'][0]['directory']
或者,修改基础的YAML数据结构。
例如,如果数据结构如下所示:
settingsMap = {
'name':
{'proj_directory': '/directory/',
'categories': {'quick': {'directory': 'quick',
'description': None,
'table_name': 'quick'}},
'intermediate': {'directory': 'intermediate',
'description': None,
'table_name': 'intermediate'},
'research': {'directory': 'research',
'description': None,
'table_name': 'research'},
'nomenclature': {'extension': 'nc',
'handler': 'script',
'filename': {'id': {'type': 'VARCHAR'},
'date': {'type': 'DATE'},
'v': {'type': 'INT'}},
'data': {'time': {'variable_name': 'time',
'units': 'minutes since 1-1-1980 00:00 UTC'}}}}}
那么您可以通过访问与上述相同的值
settingsMap['name']['categories']['quick']['directory']
# quick