回答編集履歴

4

edit

2017/12/19 11:51

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -1,3 +1,33 @@
1
+ 質問が変わったので、とりあえず出力に合うようなコードを1つ。
2
+
3
+
4
+
5
+ ```python
6
+
7
+ import itertools
8
+
9
+ d = {'A':["アキ","ヒロシ"], 'B':["1","2"]}
10
+
11
+ l = ['B', 'A']
12
+
13
+ print( '\n'.join( [a+b for b,a in itertools.product(*[d[k] for k in l])] ) )
14
+
15
+ ```
16
+
17
+
18
+
19
+ 以下2点に気をつけてください。
20
+
21
+ 辞書は順序がありませんので、コードの見た目の順番に取り出されるとは限りません。
22
+
23
+ リストを渡す順番によって、`.product`のループの回り方も変わります。
24
+
25
+
26
+
27
+ ---
28
+
29
+
30
+
1
31
  `eval`はできるのなら使わないほうがよいと思われます。
2
32
 
3
33
  以下の実装ならリストを`all_lists`に`.append`していけば目的が果たせそうです。

3

edit

2017/12/19 11:51

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -31,3 +31,25 @@
31
31
  # [('アキ', '1', 'A'), ('アキ', '1', 'B'), ('アキ', '2', 'A'), ('アキ', '2', 'B'), ('ヒロシ', '1', 'A'), ('ヒロシ', '1', 'B'), ('ヒロシ', '2', 'A'), ('ヒロシ', '2', 'B')]
32
32
 
33
33
  ```
34
+
35
+
36
+
37
+ ---
38
+
39
+
40
+
41
+ 追記:
42
+
43
+
44
+
45
+ リスト・辞書の展開はよく使うテクニックです。
46
+
47
+ 覚えておいて損はありません。
48
+
49
+ http://nonbiri-tereka.hatenablog.com/entry/2014/08/16/090437
50
+
51
+ https://qiita.com/7of9/items/e23bdd6e8d4d7997104a
52
+
53
+ https://teratail.com/questions/52472
54
+
55
+ http://d.hatena.ne.jp/xef/20121027/p2

2

edit

2017/12/19 11:41

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -18,4 +18,16 @@
18
18
 
19
19
  print(list(itertools.product(*all_lists)))
20
20
 
21
+ # [('アキ', '1'), ('アキ', '2'), ('ヒロシ', '1'), ('ヒロシ', '2')]
22
+
23
+
24
+
25
+ C = ("A","B")
26
+
27
+ all_lists.append(C)
28
+
29
+ print(list(itertools.product(*all_lists)))
30
+
31
+ # [('アキ', '1', 'A'), ('アキ', '1', 'B'), ('アキ', '2', 'A'), ('アキ', '2', 'B'), ('ヒロシ', '1', 'A'), ('ヒロシ', '1', 'B'), ('ヒロシ', '2', 'A'), ('ヒロシ', '2', 'B')]
32
+
21
33
  ```

1

edit

2017/12/19 11:20

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  B = ("1","2")
16
16
 
17
- all_lists = (A, B)
17
+ all_lists = [A, B]
18
18
 
19
19
  print(list(itertools.product(*all_lists)))
20
20