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個嵌套級別的字符?無論如何,猜測這可以通過使用堆棧並將堆棧序列(當前子字典中的所有鍵)存儲在堆棧中完成,但我不確定是否值得付出努力。 –