获取Python中字典的所有字段名

获取Python中字典的所有字段名,python,dictionary,Python,Dictionary,有没有办法获取Python字典的所有嵌套字段名 例如: 字典: { "a": [ { "b": { "c": [ "f", "g" ] } } ] } 结果: 'a[0].b.c[0]' 'a[0].b.c[1]' 可以对生成器使用递归: def traverse(d, c = []): if isinstan

有没有办法获取Python字典的所有嵌套字段名

例如:

字典:

{
   "a": [
      {
         "b": {
            "c": [
               "f",
               "g"
            ]
         }
      }
   ]
}
结果:

'a[0].b.c[0]'
'a[0].b.c[1]'

可以对生成器使用递归:

def traverse(d, c = []):
  if isinstance(d, list):
    for i, a in enumerate(d):
      if not isinstance(a, (dict, list)):
        yield '.'.join(c+[f'[{i}]'])
      else:
        yield from traverse(a, c+[f'[{i}]'])
  elif isinstance(d, dict):
     for a, b in d.items():
        if not isinstance(b, (list, dict)):
           yield '.'.join(c+[a])
        else:
           yield from traverse(b, c+[a])


d = {'a': [{'b': {'c': ['f', 'g']}}]}
import re
print([re.sub('\.(?=\[)', '', i) for i in traverse(d)])
输出:

['a[0].b.c[0]', 'a[0].b.c[1]']

您希望字段名称或其索引出现在各自的字典中吗?可能是@r.uckus的副本不,这不是sameI不认为有内置的方法,但是一个简单的递归函数应该能够遍历任意深度的dict,甚至是dict和list的混合体。也许这会有帮助:您的输出是这样的吗<代码>a
b
c