teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

さらなる質問を受けて追記

2021/09/02 07:52

投稿

TakaiY
TakaiY

スコア14431

answer CHANGED
@@ -39,4 +39,44 @@
39
39
  'id!: StringVar()}
40
40
  ```
41
41
 
42
- こんな感じです。
42
+ こんな感じです。
43
+
44
+ ---
45
+
46
+ > a1,a2,a3...、b1,b2,b3...、さらに...、等の不特定名称の変数を動的に作成し、これを格納する辞書型の作成方法は有るのでしょうか?
47
+
48
+ 番号付きの変数を作りたくなった場合は、それは、リストに入れます。
49
+ というか、そういう情報を格納するためにリストがあるのです。
50
+
51
+ ```python
52
+ a1 = 10
53
+ a2 = 20
54
+ a3 = 30
55
+ ...
56
+ ```
57
+ としたければ、
58
+ ```python
59
+ a = []
60
+ a.append(0)
61
+ a.append(10)
62
+ a.append(20)
63
+ a.append(30)
64
+ ...
65
+ ```
66
+ こうすれば、
67
+ ```python
68
+ for i in range(4):
69
+ print(a[i])
70
+ ```
71
+ のようにアクセスできます。
72
+
73
+ この方法だと、リストの生成が面倒だという場合、データの設計が間違えている可能性が高いです。たとえば今回のような場合は、
74
+ ```python
75
+ a = []
76
+ for i in range(4):
77
+ a.append(i * 10)
78
+ ```
79
+ と書くことができます。こういう規則が無いのであれば、元データをファイルに作っておいて読む手もあります。
80
+
81
+ 数字が付いているとは言っても、 1,2,3,11,12,13...のように飛び飛びにしたい場合もあるでしょう。そういうう場合は、2次元配列にするとか、番号をキーとしたdictを使います。
82
+ アクセスするときも、1けためと2けためで別に生成するとになるでしょう。

1

質問を受けて追記

2021/09/02 07:52

投稿

TakaiY
TakaiY

スコア14431

answer CHANGED
@@ -7,4 +7,36 @@
7
7
  書き込みが制限されている場合があるとありますので、それに該当しているのではないでしょうか。
8
8
 
9
9
  ・変数名を動的に生成したいという場合は、その変数名を大抵リストやdictに置き換えるのが正しい方法です。
10
- dictで代替できない理由がありますか?
10
+ dictで代替できない理由がありますか?
11
+
12
+
13
+ ---
14
+
15
+ > self.var_dict{"id":"self.var_id, "neme":"self.var_name"}と変数名の文字列を要素にした辞書型データは出来るのですが、これから変数名として取り出し、self.var_name="田中"と左辺が文字列でない状態にする方法が判りません。
16
+
17
+ dictに変数名を格納するのではありません。
18
+
19
+ > 又逆にself.var_dict["name"] = self.「var_+フィールド名 "name"」と直接文字列でない変数名を合成する方法が判りません。異常からvars()を見つけた次第です。上記の様に変数名を直接合成して作成する方法は有のでしょうか?
20
+
21
+ 変数名を合成するのでもありません。
22
+
23
+ StringVarは変数に入れなければならないわけではないのです。
24
+
25
+ StringVarそのものをdictに入れればいいのです。
26
+
27
+ ```python
28
+ var_dict['name'] = StringVar()
29
+ var_dict['id'] = StringVar()
30
+ ```
31
+
32
+ さらにこれを複数持ちたいのであれば、さらにリストやdictに入れます。
33
+
34
+ ```python
35
+
36
+ button_dict{'OK'} = {'name': StringVar(),
37
+ 'id!: StringVar()}
38
+ button_dict{'Cansel'} = {'name': StringVar(),
39
+ 'id!: StringVar()}
40
+ ```
41
+
42
+ こんな感じです。