You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Python字典的所有字段名及嵌套字典的所有嵌套字段名?

嘿,我来帮你搞定这两个Python字典字段名的问题!

问题1:如何获取Python字典的所有字段名?

这个超简单!对于普通的非嵌套字典,直接用字典的keys()方法就能拿到所有字段名啦。不过要注意,keys()返回的是一个视图对象(dict_keys类型),如果需要用列表形式操作,转成列表就行。

举个例子:

my_dict = {"username": "john_doe", "email": "john@example.com", "age": 28}
# 获取所有字段名的列表
field_names = list(my_dict.keys())
print(field_names)  # 输出: ['username', 'email', 'age']

如果只是想遍历字段名,甚至不用转列表,直接循环my_dict.keys()或者直接循环字典本身(因为遍历字典默认就是遍历键)都可以。


问题2:是否有方法获取Python嵌套字典的所有嵌套字段名?

当然有!不过因为嵌套结构里可能混着字典和列表(比如你给的示例里就有数组),所以需要用递归的方式遍历整个结构,一步步拼接出完整的字段路径。

我给你写一个实用的递归函数,刚好能处理你给出的示例场景:

def get_nested_field_paths(data, current_path=""):
    paths = []
    # 处理字典类型
    if isinstance(data, dict):
        for key in data:
            # 拼接新路径:如果已有路径就加个点,否则直接用当前键
            new_path = f"{current_path}.{key}" if current_path else key
            # 递归处理当前键对应的值
            paths.extend(get_nested_field_paths(data[key], new_path))
    # 处理列表类型
    elif isinstance(data, list):
        for index, item in enumerate(data):
            # 列表的话,路径要加上索引,比如 [0]
            new_path = f"{current_path}[{index}]"
            # 递归处理列表中的每个元素
            paths.extend(get_nested_field_paths(item, new_path))
    # 处理叶子节点(非字典非列表的类型,比如字符串、数字)
    else:
        paths.append(current_path)
    return paths

# 测试你给的示例字典
sample_data = { "a": [ { "b": { "c": [ "f", "g" ] } } ] }
result_paths = get_nested_field_paths(sample_data)
print(result_paths)  # 输出: ['a[0].b.c[0]', 'a[0].b.c[1]']

这个函数的逻辑很清晰:

  • 遇到字典就遍历它的每个键,拼接路径后递归处理对应的值
  • 遇到列表就遍历每个元素的索引,把索引加到路径里再递归
  • 遇到不能再拆分的叶子节点,就把当前的完整路径加入结果列表

你还可以根据自己的需求调整路径格式,比如把点换成斜杠,或者把列表索引的格式改成其他样式,灵活得很!

内容的提问来源于stack exchange,提问作者Anatoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:11:48