1
我有一个遍历键的所有组合到一个特定的深度嵌套的字典发电机:删除递归
def iter_dict(levels, input_dict, items=[], sort=False, **sort_args):
for dict_key, val in (sorted(input_dict.items(), **sort_args) if
sort else input_dict.items()):
if levels == 1:
yield items + [(dict_key, val)]
else:
yield from iter_dict(levels - 1, val, items + [(dict_key, val)])
所以它就像这样:
>>> d = {'a': 1, 'b': 2}
>>> list(iter_dict(1, d))
[[('a', 1)], [('b', 2)]]
并且
>>> d = {'a': {'c': 1}, 'b': {'d' : 2}}
>>> list(iter_dict(1, d))
[[('a', {'c': 1})], [('b', {'d': 2})]]
>>> list(iter_dict(2, d))
[[('a', {'c': 1}), ('c', 1)], [('b', {'d': 2}), ('d', 2)]]
生成器的每次迭代都返回一个元组列表,第n个元组为(key, value)
在深度为n的嵌套字典中。
但我正在巨大的字典上实现这个功能,并担心达到最大递归深度级别。
如何重写生成器以删除递归?
我真的不明白输出结构的解释是:(或它可以用于...) – poke
这对于遍历嵌套字典中的所有键值对(直到指定深度)都很有用。生成器上的每次迭代都会返回一个元组列表,第n个元组为'(key,value)'深度为n的嵌套字典 – texasflood
您是否期望拥有1000个嵌套级别的字符?无论如何,猜测这可以通过使用堆栈并将堆栈序列(当前子字典中的所有键)存储在堆栈中完成,但我不确定是否值得付出努力。 –