如何解决在不使用递归的情况下将嵌套字典解除为简单字典
下面是一个字典,它的键是字符串,值是字典或整数。
sample = {"A": 1,"B1": {"BB1": {"B" : 2}},"C1": {"C" : 3} }
我想在值为整数的地方打印键和值。 所以,输出应该是。
{"A":1,"B":2,"C":3}
注意:我需要知道这是否可以不用递归解决。
解决方法
您可以使用具有广度优先搜索的生成器来构建输出字典,而不是在每个级别打印值:
sample = {"A": 1,"B1": {"BB1": {"B" : 2}},"C1": {"C" : 3} }
def get_leaves(d):
q = [d]
while q:
for a,b in q.pop(0).items():
if not isinstance(b,dict):
yield (a,b)
else:
q.append(b)
r = dict(get_leaves(sample))
输出:
{'A': 1,'C': 3,'B': 2}
,
你需要遍历你的字典。虽然这将使用 recursion
。
def traverse(dictEx):
for k,v in dictEx.items():
if isinstance(v,dict):
traverse(v)
elif type(v) == int:
print({k:v})
sample = {"A": 1,"C1": {"C" : 3}}
traverse(sample)
这是另一种没有递归的解决方案。
def traverse(dictEx):
it = list(dictEx.items())
while it:
k,v = it.pop()
if isinstance(v,dict):
it.extend(v.items())
elif type(v) == int:
print({k:v})
sample = {"A": 1,"C1": {"C" : 3}}
traverse(sample)
输出
{'A': 1}
{'B': 2}
{'C': 3}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。