😊

Pythonでリストの組合せを作成する

2022/11/13に公開

Python でリストの組合せを作成する

大した技術ではありませんが、地味に使っているので公開します。

モチベーション

Stable Diffusion で Prompt の組合せ評価を行っているとき、いろいろ組合せがあると面倒だからなんとかならんかなぁ?と考えていました。

調べれば itertools というライブラリで目的は達成できるのですが、ベースを Json にしていたので、辞書キー:リストの形でうまく使えるようにしたかったです。

使い方

コードは下記の通り簡単です。

  1. key:list の形で形成された辞書を作成します。
  2. 各 key のリストを大きいリストでネストします。
  3. 大きいリストをアンパックしながら 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