30

Python 3 でネストされた辞書内包表記を理解するのに問題があります。以下の例から取得した結果は、エラーなしで正しい構造を出力しますが、内部のキーと値のペアの 1 つしか含まれていません。このようなネストされた辞書内包表記の例は見つかりませんでした。「ネストされた辞書内包表記 python」をグーグルで検索すると、従来の例、ネストされていない内包表記、または別のアプローチを使用して解決された回答が表示されます。間違った構文を使用している可能性があります。

例:

data = {outer_k: {inner_k: myfunc(inner_v)} for outer_k, outer_v in outer_dict.items() for inner_k, inner_v in outer_v.items()}

この例では元の辞書を返す必要がありますが、内部の値は によって変更されていmyfuncます。

outer_dict ディクショナリの構造と結果:

{outer_k: {inner_k: inner_v, ...}, ...}
4

3 に答える 3

39

いくつかの改行とインデントを追加:

data = {
    outer_k: {inner_k: myfunc(inner_v)} 
    for outer_k, outer_v in outer_dict.items()
    for inner_k, inner_v in outer_v.items()
}

...実際には、単一の「2次元」辞書理解があることが明らかになります。あなたが実際に望むのは、おそらく次のとおりです。

data = {
    outer_k: {
        inner_k: myfunc(inner_v)
        for inner_k, inner_v in outer_v.items()
    } 
    for outer_k, outer_v in outer_dict.items()
}

(これはまさに Blender が彼の回答で提案したもので、空白が追加されています)。

于 2013-07-29T02:26:49.390 に答える