【发布时间】:2019-03-26 00:21:13
【问题描述】:
我需要能够在字典的深层嵌套属性中进行广度优先循环。这让我获得了成功 (https://stackoverflow.com/a/10756615/5932433),但结果不是我所需要的。
给定以下数据结构:
data = {
"a": {
"c": 1,
"d": 3,
},
"b": {
"e": 2,
"f": 4,
}
}
我需要一个返回以下内容的方法:
for _, v in cycle(tree_iter(data)):
print v
# 1 (a -> c)
# 2 (b -> e)
# 3 (a -> d)
# 4 (b -> f)
# 1
# 2
# 3
# 4
# ...etc...
这是我现在对tree_iter 的方法:
def tree_iter(nested):
for key, value in nested.iteritems():
if isinstance(value, Mapping):
for inner_key, inner_value in tree_iter(value):
yield inner_key, inner_value
else:
yield key, value
请注意,不需要保证顺序,只要它是一致的即可。每次迭代都应该循环 a/b,然后循环遍历嵌套值。
【问题讨论】:
-
另外,dict的结构也会保持一致。所有值都在第 n 级。