我有一个嵌套的dict,它有列表和dict,如下所示。在
m = {'abc':
{'bcd': [
{'cde':'100','def':'200','efg':'300'},
{'cde':'3000','def':'500','efg':'4000'}
],
'ghi':
{'mnc': [
{'xyz':'8827382','mnx':'e838','wyew':'2232'}
]
}
}
}
我的要求是匹配mnx key,如果值是'e838'
,那么就获得该特定dict中其他键的值。因此,从上面的示例中,我可能需要xyz
key的值。在
为此,我创建了一个递归循环函数,如下所示。然而,我的问题是,是否有更好/更简单的方法来做这件事。如果我需要用mnx键获取所有值,那么在同一代码中可以做什么呢。谢谢。在
注意:我在jxmleeslib的帮助下将XML转换成dict。在
^{pr2}$
这段代码使用递归生成器进行搜索,因此它将在找到它们时生成所有的解决方案。在
当
iterate_dict
找到具有所需(键、值)对的dict时,它调用filter_dict
,这将创建一个新dict来包含输出。这个新dict包含传递给filter_dict
的dict项,除了过滤掉所需的(键、值)对之外,它还过滤掉该dict可能包含的任何列表或dict。但是,iterate_dict
将递归地处理这些列表或dict,以寻找进一步的匹配项。如果您不希望iterate_dict
查找进一步的匹配项,那么可以很容易地修改代码,这样就不会这样做;请参见下面的内容。在如果要搜索包含所需键的dict,而不关心与该键相关联的值,可以将
None
作为val
参数传递,或者忽略该参数。在我稍微修改了您的数据,这样我们就可以在包含匹配项的dict中测试递归搜索进一步的匹配项。在
输出
^{pr2}$以下是搜索包含
'mnx'
键的所有dict:输出
如果您不希望在每个dict中找到匹配项后递归地搜索进一步的匹配项,只需将
iterate_dict
更改为:您可以将dict“展平”成dict列表,然后根据需要进行查询:
输出:
^{pr2}$您应该构建一个dict列表来迭代,而不是使用原始数据。在
相关问题 更多 >
编程相关推荐