Skip to main content
 首页 » 编程设计

python之获取嵌套字典中所有项目的所有 parent 键

2025年05月04日14exmyth

我想获取无限级别的嵌套 python 字典中所有项目的所有父键。打个比方,如果您将嵌套字典视为包含子目录的目录,我想要的行为类似于 glob.glob(dir, recursive=True) 所做的。

例如,假设我们有以下字典:

sample_dict = { 
  "key_1": { 
    "sub_key_1": 1, 
    "sub_key_2": 2, 
  }, 
  "key_2": { 
    "sub_key_1": 3, 
    "sub_key_2": { 
      "sub_sub_key_1": 4, 
    }, 
  }, 
} 

我想获取字典中每个值的完整“路径”:

["key_1", "sub_key_1", 1] 
["key_1", "sub_key_2", 2] 
["key_2", "sub_key_1", 3] 
["key_2", "sub_key_2", "sub_sub_key_1", 4] 

只是想知道是否有一种干净的方法来做到这一点?

请您参考如下方法:

使用生成器通常可以简化这些类型任务的代码并使它们更具可读性,同时避免将显式状态参数传递给函数。你得到一个生成器而不是一个列表,但这是一件好事,因为如果你愿意,你可以懒惰地评估。例如:

def getpaths(d): 
    if not isinstance(d, dict): 
        yield [d] 
    else: 
        yield from ([k] + w for k, v in d.items() for w in getpaths(v)) 
 
result = list(getpaths(sample_dict)) 

结果将是:

[['key_1', 'sub_key_1', 1], 
 ['key_1', 'sub_key_2', 2], 
 ['key_2', 'sub_key_1', 3], 
 ['key_2', 'sub_key_2', 'sub_sub_key_1', 4]]