python
1import itertools 2 3dict = {A:["アキ","ヒロシ"], B:["1","2"]} 4 5print(list(itertools.product(dict))) 6
期待する出力 アキ1 ヒロシ1 アキ2 ヒロシ2
itertoolsという関数にリストが入った辞書型の値を複数の一時配列で渡したいのですが、valuesで渡すと、二次配列になってしまいます。
うまい渡し方を教えてください。お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
こういうことですか?
Python
1import itertools 2A = ("アキ","ヒロシ") 3B = ("1","2") 4C = ("spam","ham","egg") 5D = [A] 6print( *itertools.product( *D ) ) 7D = [A,B] 8print( *itertools.product( *D ) ) 9D = [A,B,C] 10print( *itertools.product( *D ) )
質問が変更されたので、回答を変更
Python
1import itertools 2dict = {'A':["アキ","ヒロシ"], 'B':["1","2"]} 3print( *itertools.product( *dict.values() ) )
投稿2017/12/19 11:21
編集2017/12/19 11:30総合スコア36115
0
質問が変わったので、とりあえず出力に合うようなコードを1つ。
python
1import itertools 2d = {'A':["アキ","ヒロシ"], 'B':["1","2"]} 3l = ['B', 'A'] 4print( '\n'.join( [a+b for b,a in itertools.product(*[d[k] for k in l])] ) )
以下2点に気をつけてください。
辞書は順序がありませんので、コードの見た目の順番に取り出されるとは限りません。
リストを渡す順番によって、.product
のループの回り方も変わります。
eval
はできるのなら使わないほうがよいと思われます。
以下の実装ならリストをall_lists
に.append
していけば目的が果たせそうです。
python
1import itertools 2 3A = ("アキ","ヒロシ") 4B = ("1","2") 5all_lists = [A, B] 6print(list(itertools.product(*all_lists))) 7# [('アキ', '1'), ('アキ', '2'), ('ヒロシ', '1'), ('ヒロシ', '2')] 8 9C = ("A","B") 10all_lists.append(C) 11print(list(itertools.product(*all_lists))) 12# [('アキ', '1', 'A'), ('アキ', '1', 'B'), ('アキ', '2', 'A'), ('アキ', '2', 'B'), ('ヒロシ', '1', 'A'), ('ヒロシ', '1', 'B'), ('ヒロシ', '2', 'A'), ('ヒロシ', '2', 'B')]
追記:
リスト・辞書の展開はよく使うテクニックです。
覚えておいて損はありません。
http://nonbiri-tereka.hatenablog.com/entry/2014/08/16/090437
https://qiita.com/7of9/items/e23bdd6e8d4d7997104a
https://teratail.com/questions/52472
http://d.hatena.ne.jp/xef/20121027/p2
投稿2017/12/19 11:18
編集2017/12/19 11:51総合スコア8560
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/19 11:26
2017/12/20 23:34