微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不使用递归的情况下将嵌套字典解除为简单字典

如何解决在不使用递归的情况下将嵌套字典解除为简单字典

下面是一个字典,它的键是字符串,值是字典或整数。

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 举报,一经查实,本站将立刻删除。