2

私はマトリックスを持っています:

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']or matrix['A']['A2'].

簡単に言うと、複数レベルの辞書と、その辞書の階層にマップされる文字列のリストがあります。そのような['A','A1','A2']

これを行う最もpythonicな方法がわかりません。

以下の作品。もっと簡潔で読みやすい方法があるかどうか疑問に思っています。インプットを提供し、明らかな間違いを修正するために、別の目のセットが欲しい.

get_target_path( pth , mtx ):
    try:
        value = mtx    
        for level in pth :
            value = value[level]
        return value
    except KeyError :
        return None

target_path = ['A','A2','A22']
result = get_target_path( target_path , matrix )
4

2 に答える 2

4

私は元の罰金が好きです。関係する答えreduceは、ほとんどのコードリーダーが絶望して頭をかきむしるでしょう(LOL-しかしreduce、Python 3に組み込まれていることで威厳がなくなったのには理由があります)。その「言葉遣い」をカットすることをお勧めします。

def get_target_path(pth, mtx):
    for level in pth:
        mtx = mtx.get(level, None)
        if mtx is None:
            break
    return mtx
于 2013-10-01T23:49:53.473 に答える