从多级字典中提取特定路径

2024-04-25 22:59:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个矩阵:

matrix = {
    'A' : {
        'A1' : { 
            'A11' : [1,2,3],
            'A12' : [4,5,6],
        },
        'A2' : {
            'A21' : [11,12,14],
            'A22' : [14,15,16],
        },
        'A3' : {
            'A31' : [111,112,114],
            'A32' : [114,115,116],
        },
    }
}

我想检索动态查询的特定路径——比如matrix['A']['A2']['A22']或{}。在

简单地说,我有一个多级字典,以及映射到该字典中层次结构的字符串列表。例如['A','A1','A2']

我不确定这是最Python式的方式。在

下面的工作。我只是想知道有没有更简洁易读的方法。我想换一双眼睛来提供输入并纠正一个明显的错误。在

^{pr2}$

Tags: 路径a2字典层次结构a1动态矩阵matrix
2条回答

较短的选择是:

import operator
from functools import reduce  # in python 3 only; reduce is a builtin in python 2

def get_target_path(path, matrix):
    try:
        return reduce(operator.getitem, path, matrix)
    except KeyError:
        return None

但我不认为它真的更好;我可能会像你写的那样(虽然间隔不同:p)。在

我喜欢原汁原味的。任何涉及reduce的回答都会让大多数代码读者感到绝望(LOL-但有一个原因,reduce不再是python3中的内置组件)的尊严。我建议你把它的“冗长”删掉:

def get_target_path(pth, mtx):
    for level in pth:
        mtx = mtx.get(level, None)
        if mtx is None:
            break
    return mtx

相关问题 更多 >