我正在尝试从嵌套字典中检索单个级别。因此,例如,给定下面的字典,我希望看到第一级和第二级的以下结果。
nested_dict = {
'foo':'bar',
'baz':{
'foo':'baz'
}}
# level 0
{'foo':'bar'}
# level 1
{'foo':'baz'}
我可以使用 dict
理解检索第一级:
{k:v for (k,v) in nested_dict.items() if type(v) is not dict}
>>> {'foo':'bar'}
或者使用递归检索指定级别:
def get_level(nested_dict, level):
if level == 0:
return {k:v for (k,v) in nested_dict.items() if type(v) is not dict}
else:
this_level = {}
for (k,v) in nested_dict.items():
if type(v) is dict:
this_level.update(v)
return get_level(this_level, level - 1)
get_level(nested_dict, 1)
>>> {'foo':'baz'}
我现在想知道是否有更多 Pythonic/clean/开箱即用的方法来检索嵌套字典的级别(正如我在上面所做的那样),如果有必要,可以借助一个包。
最佳答案
如评论中所述,我假设您没有重复项:
nested_dict = {
'foo':'bar',
'baz':{
'foo':'baz',
'fee': {
'foo': 'fee'
}
},
'baz2':{
'foo2':'baz2'
}
}
def get_level(dct, level):
if level == 0:
yield from ((k, v) for k, v in dct.items() if not isinstance(v, dict))
else:
yield from ((kk, vv) for v in dct.values() if isinstance(v, dict) for kk, vv in get_level(v, level-1))
print(dict(get_level(nested_dict, 1)))
打印:
{'foo': 'baz', 'foo2': 'baz2'}
print(dict(get_level(nested_dict, 2)))
打印:
{'foo': 'fee'}
关于从嵌套字典中检索单个级别的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62864489/