我想获取无限级别的嵌套 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]]
