リスト辞書のデカルト積
2023-09-30 16:27:01
質問
たくさんの入力パラメータのデカルト積をテストするためのコードを書こうとしています。
私は見てきました
itertools
を見ましたが、その
product
関数は、私が欲しいものではありません。任意の数のキーを持つ辞書を取るための簡単で明白な方法はありますか?
と
各値に任意の数の要素を持つ辞書を取得し、次の順列を持つ辞書を生成する簡単で明白な方法はありますか?
入力してください。
options = {"number": [1,2,3], "color": ["orange","blue"] }
print list( my_product(options) )
出力例です。
[ {"number": 1, "color": "orange"},
{"number": 1, "color": "blue"},
{"number": 2, "color": "orange"},
{"number": 2, "color": "blue"},
{"number": 3, "color": "orange"},
{"number": 3, "color": "blue"}
]
どのように解決するのですか?
OK、私が間違った場所を探していたことを教えてくれた@dfanに感謝します。私は今それを得ました。
from itertools import product
def my_product(inp):
return (dict(zip(inp.keys(), values)) for values in product(*inp.values())
EDIT
: 何年かの Python の経験の後、より良い解決策は
kwargs
を受け入れることだと思います。呼び出しのスタイルは、オリジナルの
itertools.product
. また、ジェネレータ式を返す関数ではなく、ジェネレータ関数を書くことで、より明確なコードになると思います。というわけで。
def product_dict(**kwargs):
keys = kwargs.keys()
vals = kwargs.values()
for instance in itertools.product(*vals):
yield dict(zip(keys, instance))
と、dictで渡す必要がある場合は
list(product_dict(**mydict))
. を使った場合の注目すべき変更点は
kwargs
を使うことで、少なくとも Python 3.6 までは、キーや値の順序付けができなくなります。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] 辞書から要素を削除する
-
[解決済み] 2つのリストを辞書に変換するにはどうしたらいいですか?
-
[解決済み] リスト内包型辞書の作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する