【发布时间】:2015-06-16 04:42:46
【问题描述】:
这个很棘手...关于如何遍历树有很多问题和答案,但我无法根据我的特殊情况调整任何建议的解决方案。我的问题很接近Python: How can I filter a n-nested dict of dicts by leaf value?
我的 JSON 数据具有特殊的嵌套结构(子术语、同义词、名称、id),可以是任意深度。
tree=[{'id': 20, 'name': 'education', 'subterms': [
{'id': 21, 'name': 'schools', 'synonyms': []},
{'id': 22, 'name': 'schoolbooks', 'synonyms': ['literature']},
{'id': 23, 'name': 'higher education', 'synonyms': ['university']},
{'id': 25, 'name': 'conference', 'synonyms': ['lecture']}]},
{'id': 26, 'name': 'health', 'subterms': [
{'id': 27, 'name': 'health issues', 'synonyms': []},
{'id': 28, 'name': 'nutrition', 'synonyms': []},
{'id': 29, 'name': 'medicine', 'synonyms': []}]},
{'id': 1, 'name': 'business', 'subterms': [{'id': 2,
'name': 'industry',
'subterms': [{'id': 21, 'name': 'service', 'synonyms': []},
{'id': 21, 'name': 'agriculture', 'synonyms': []}],
'synonyms': []},
{'id': 3, 'name': 'professions', 'synonyms': ['jobs']}]}]
我的目标是通过匹配“名称”和“同义词”来过滤这棵树。必须保留匹配项的分支层次结构:级别 3 上的匹配子项意味着级别 1 和 2 上的父项也被保留(但不保留子项)。
例如,使用filterterms=['literature', 'agriculture'] 应该会产生以下过滤树:
[{'id': 20, 'name': 'education', 'subterms': [
{'id': 22,'name': 'schoolbooks', 'synonyms': ['literature']}]},
{'id': 1, 'name': 'business', 'subterms': [{'id': 2, 'name': 'industry',
'subterms': [{'id': 21, 'name': 'agriculture', 'synonyms': []}],
'synonyms': []}]}]
到目前为止,我在 n 层上遍历树并保留匹配项的分支层次结构的所有尝试都失败了...关于如何解决此任务的任何帮助?
【问题讨论】:
标签: python json dictionary tree hierarchy