【发布时间】:2017-12-04 11:12:54
【问题描述】:
我在 Python 中有一个嵌套的字典,其中包含 YAML 结构,例如
- id: left_time
type: u2
doc: Time left
我想获得像 {id: doc} 这样的对。对于这个例子,我希望它是:{“left_time”:“剩余时间”}。问题是我需要递归地遍历它们。
我的尝试是
def get_dict_recursively(search_dict, field):
fields_found = []
name = ""
for key, value in search_dict.items():
if key == "id":
name = value
if key == field:
fields_found.append({name: value})
elif isinstance(value, dict):
results = get_dict_recursively(value, field)
for result in results:
fields_found.append({name: result})
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = get_dict_recursively(item, field)
for another_result in more_results:
fields_found.append({name: another_result})
return fields_found
这样称呼它
get_dict_recursively(dict, "doc")
在哪里
dict = {
meta:
id: foo
title: Foo
types:
data:
seq:
- id: left_time
type: u2
doc: Time left
gps:
seq:
- id: gps_st
type: b2
- id: sats
type: b6
doc: Number of satellites
}
有一个错误,但我找不到。
【问题讨论】:
-
我是否理解正确,您描述的最后一个 dict 的结果应该是 {"left_time": "Time left", "sats": "Number of satellites"}?
-
@pho7,没错。
标签: python dictionary recursion