2つの辞書をすべての組み合わせを含む辞書の辞書に変換します

1
2022.01.14

問題

私は2つの辞書を持っています: aとb

a={'e':[1,2]}
b={'d':[11,22]}

どのように私はリスト [1,2][11,22]の可能な組み合わせを含む辞書の辞書にそれらを変換することができます。期待される結果は次のようになります。

 dic={1:{'e':1,'d':11},
      2:{'e':2,'d':22},
      3:{'e':1,'d':11},
      4:{'e':2,'d':22}}

私のattemt:

私は簡単にそうのような itertools を使用して2つのリストやリストの任意のセットの組み合わせを得ることができます:

l=list(itertools.product([1,2],[11,22]))

しかし、私はここから進む方法を知りません。任意の提案?

回答
3
2022.01.14

あなたはほとんどそれを持っています。 lの組にキーをマッピングして辞書を作成するだけです。

keys = list(a.keys()) + list(b.keys())
dic = {k: dict(zip(keys, tpl)) for k, tpl in enumerate(l), 1)}

もう少し一般的なアプローチを次に示します。

(i) まず辞書を結合します。

combined = {**a, **b}

(ii) combined.values()でリスト項目をデカルト積を検索します。

(iii) (ii) からの結果を反復処理し、各タプルと combined.keys()のキーを持つ辞書を作成します。

dic = {k: dict(zip(combined.keys(), tpl)) for k, tpl in enumerate(itertools.product(*combined.values()), 1)}

アウトプット:

{1: {'e': 1, 'd': 11}, 2: {'e': 1, 'd': 22}, 3: {'e': 2, 'd': 11}, 4: {'e': 2, 'd': 22}}