问题描述
下面是一个字典,它的键是字符串,值是字典或整数。
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}