从嵌套字典中检索单个级别的 Pythonic 方法

标签 python dictionary

我正在尝试从嵌套字典中检索单个级别。因此,例如,给定下面的字典,我希望看到第一级和第二级的以下结果。

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/

相关文章:

python - 错误 : "Undefined symbol" when trying to import pyarrow/feather

python - ModelChoiceField 给出 “Select a valid choice” 使用 ajax 调用填充选择

python - 如何将 Django 变量作为 javascript 方法参数传递?

python - 如何通过对前一行和当前行的值求和来填充 PySpark Dataframe 的行?

c# - LINQ 在 C# 中使用多个键值选择查询嵌套字典

c# - MVC ViewModel 包含一个字典,用于将空值返回给 Controller 的字段

python - 如何在 PyQt 中绘制自定义椭圆形?

C#将一条记录从一个字典复制到另一个

arrays - 如何在Dart中对该数组/映射进行排序?

c++ - 为什么我的 map 打印全为零?