以有序方式提取动态嵌套字典中的字段
Extract fields in a dynamically nested dictionary in an ordered manner
给定以下字典 - 它是动态的,因此可能存在任何深度级别(嵌套结构):
data = {
"level": {
"system": {
"text": "A Lorem ipsum colour."
},
"board": {
"core": {
"text": "Another one."
}
}
},
"peer": {
"core": {
"text": "B Lorem ipsum colour."
},
"main": {
"text": "C Lorem ipsum colour."
}
}
}
目标是提取有序的 text
个元素(从上到下),结果应该是这样的:
result = "A Lorem ipsum colour. Another one. B Lorem ipsum colour. C Lorem ipsum colour.
我想我必须使用某种类型的递归,但我做不到。到目前为止我得到的 - 以及不起作用的 - 如下:
for k, v in data.items():
if isinstance(v, dict):
# i think i have to continue here on a deeper recursion level
else:
return v["text"]
此致
def dict_value(val: dict):
for key, item in val.items():
if type(item) == dict:
dict_value(item)
else:
print(item)
dict_value(data)
为了得到原题中所述的结果:
data = {
"level": {
"system": {
"text": "A Lorem ipsum colour."
},
"board": {
"core": {
"text": "Another one."
}
}
},
"peer": {
"core": {
"text": "B Lorem ipsum colour."
},
"main": {
"text": "C Lorem ipsum colour."
}
}
}
def get_text(d, lst):
for k, v in d.items():
if isinstance(v, dict):
get_text(v, lst)
elif k == 'text':
lst.append(v)
return lst
print(' '.join(get_text(data, [])))
输出:
A Lorem ipsum colour. Another one. B Lorem ipsum colour. C Lorem ipsum colour.
给定以下字典 - 它是动态的,因此可能存在任何深度级别(嵌套结构):
data = {
"level": {
"system": {
"text": "A Lorem ipsum colour."
},
"board": {
"core": {
"text": "Another one."
}
}
},
"peer": {
"core": {
"text": "B Lorem ipsum colour."
},
"main": {
"text": "C Lorem ipsum colour."
}
}
}
目标是提取有序的 text
个元素(从上到下),结果应该是这样的:
result = "A Lorem ipsum colour. Another one. B Lorem ipsum colour. C Lorem ipsum colour.
我想我必须使用某种类型的递归,但我做不到。到目前为止我得到的 - 以及不起作用的 - 如下:
for k, v in data.items():
if isinstance(v, dict):
# i think i have to continue here on a deeper recursion level
else:
return v["text"]
此致
def dict_value(val: dict):
for key, item in val.items():
if type(item) == dict:
dict_value(item)
else:
print(item)
dict_value(data)
为了得到原题中所述的结果:
data = {
"level": {
"system": {
"text": "A Lorem ipsum colour."
},
"board": {
"core": {
"text": "Another one."
}
}
},
"peer": {
"core": {
"text": "B Lorem ipsum colour."
},
"main": {
"text": "C Lorem ipsum colour."
}
}
}
def get_text(d, lst):
for k, v in d.items():
if isinstance(v, dict):
get_text(v, lst)
elif k == 'text':
lst.append(v)
return lst
print(' '.join(get_text(data, [])))
输出:
A Lorem ipsum colour. Another one. B Lorem ipsum colour. C Lorem ipsum colour.