😊
Pythonでリストの組合せを作成する
Python でリストの組合せを作成する
大した技術ではありませんが、地味に使っているので公開します。
モチベーション
Stable Diffusion で Prompt の組合せ評価を行っているとき、いろいろ組合せがあると面倒だからなんとかならんかなぁ?と考えていました。
調べれば itertools というライブラリで目的は達成できるのですが、ベースを Json にしていたので、辞書キー:リストの形でうまく使えるようにしたかったです。
使い方
コードは下記の通り簡単です。
- key:list の形で形成された辞書を作成します。
- 各 key のリストを大きいリストでネストします。
- 大きいリストをアンパックしながら itertools.product に渡せば完了
sample.py
import itertools
dic_origin = {"A":["a","b","c"], "B":["ADD","CHANGE","REMOVE"]}
list_dic_value = []
[list_dic_value.append(dic_origin[x]) for x in dic_origin.keys()] # dict only
result_list = list(itertools.product(*list_dic_value))
print(result_list)
# [('a', 'ADD'), ('a', 'CHANGE'), ('a', 'REMOVE'), ('b', 'ADD'), ('b', 'CHANGE'), ('b', 'REMOVE'), ('c', 'ADD'), ('c', 'CHANGE'), ('c', 'REMOVE')]
今回は辞書をベースにしていますが、リストをすでに持っていた場合は #dict only と書かれている行を削除し、list_dic_value.append(list)で追加し続ければ OK です。
記事とするか悩みましたが、同じ悩みを持っている方もいるだろうと思って公開しました。
Discussion