【发布时间】:2015-07-17 09:12:16
【问题描述】:
我有一棵嵌套字典树。这是一个小摘录,只是为了给你一个想法:
db = {
'compatibility': {
'style': {
'path_to_file': 'compatibility/render/style.py',
'checksum': {
'0.0.3':'AAA55d796c25ad867bbcb8e0da4e48d17826e6f9fce',
'0.0.2': '55d796c25ad867bbcb8e0da4e48d17826e6f9fe606',}}},
'developer': {
'render': {
'installation': {
'path_to_file': 'developer/render/installation.py',
'checksum': {
'0.0.1': 'c1c0d4080e72292710ac1ce942cf59ce0e26319cf3'}},
'tests': {
'path_to_file': 'developer/render/test.py',
'checksum': {
'0.0.1': 'e71173ac43ecd949fdb96cfb835abadb877a5233a36b115'}}}}}
我想获取嵌套在树中的所有字典模块的列表。这样我就可以循环列表并测试每个文件的校验和(请注意,模块可能位于不同级别,如上例所示)。
为此,我编写了以下递归函数。我知道每个模块都有一个“path_to_file”和“checksum”键,所以我用它来测试字典是否是一个模块。请注意,我必须将递归函数包装在另一个保存列表的函数中,这样每次递归函数运行时列表就不会被覆盖。
def _get_modules_from_db(dictionary):
def recursive_find(inner_dictionary):
for k, v in inner_dictionary.iteritems():
if (isinstance(v, dict) and
not sorted(v.keys()) == ['path_to_file', 'sha512sum']):
recursive_find(v)
else:
leaves.append(v)
leaves = []
recursive_find(dictionary)
return leaves
这种方法有效,但是对我来说必须包装函数似乎很难看。所以,我对 Stack Overflow 专业人士的问题:
您是否推荐更简单(或更好)的方法来实现这一点而无需包装函数?
【问题讨论】:
标签: python dictionary nested