質問編集履歴

5

修正

2020/11/27 07:38

投稿

eve
eve

スコア19

test CHANGED
File without changes
test CHANGED
@@ -2,232 +2,10 @@
2
2
 
3
3
  以下のような、ネスト構造の辞書型のデータを扱っています。
4
4
 
5
- ここから、'is_up'がtrueならばkey(GigabitEthernet0/1など)とそのmac_addressを取り出すという
6
5
 
7
- 処理を行いたいのです。
8
-
9
- そのために、まずは、for文でループさせて'is_up'の要素TrueまたはFalseを取り出し
10
6
 
11
7
  一気に判定したいのですが、多次元の辞書型の場合どのように指定するか分かりません。
12
8
 
13
9
  jsonファイルに変換してから処理した方が容易でしょうか。
14
10
 
15
11
  アドバイスをお願い致します。
16
-
17
-
18
-
19
-
20
-
21
- ### 試したこと
22
-
23
- ```python
24
-
25
- #辞書型のオブジェクトはresultです
26
-
27
- for k in result[keys][2]():
28
-
29
- print(k)
30
-
31
- ```
32
-
33
-
34
-
35
- ```python
36
-
37
- for k in result.keys[2]():
38
-
39
- print(k)
40
-
41
- ```
42
-
43
-
44
-
45
- ```python
46
-
47
- for k in result.values["is_up"]():
48
-
49
- print(k)
50
-
51
- ```
52
-
53
-
54
-
55
-
56
-
57
- ### 補足情報(result)
58
-
59
- ```
60
-
61
- #resultをpprintで出力したものです
62
-
63
- {'GigabitEthernet0/1': {'description': '',
64
-
65
- 'is_enabled': True,
66
-
67
- 'is_up': True,
68
-
69
- 'last_flapped': -1.0,
70
-
71
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
72
-
73
- 'mtu': 1500,
74
-
75
- 'speed': 1000},
76
-
77
- 'GigabitEthernet0/10': {'description': '',
78
-
79
- 'is_enabled': True,
80
-
81
- 'is_up': False,
82
-
83
- 'last_flapped': -1.0,
84
-
85
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
86
-
87
- 'mtu': 1500,
88
-
89
- 'speed': 10},
90
-
91
- 'GigabitEthernet0/2': {'description': '',
92
-
93
- 'is_enabled': True,
94
-
95
- 'is_up': False,
96
-
97
- 'last_flapped': -1.0,
98
-
99
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
100
-
101
- 'mtu': 1500,
102
-
103
- 'speed': 10},
104
-
105
- 'GigabitEthernet0/3': {'description': '',
106
-
107
- 'is_enabled': True,
108
-
109
- 'is_up': False,
110
-
111
- 'last_flapped': -1.0,
112
-
113
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
114
-
115
- 'mtu': 1500,
116
-
117
- 'speed': 10},
118
-
119
- 'GigabitEthernet0/4': {'description': '',
120
-
121
- 'is_enabled': True,
122
-
123
- 'is_up': False,
124
-
125
- 'last_flapped': -1.0,
126
-
127
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
128
-
129
- 'mtu': 1500,
130
-
131
- 'speed': 10},
132
-
133
- 'GigabitEthernet0/5': {'description': '',
134
-
135
- 'is_enabled': True,
136
-
137
- 'is_up': True,
138
-
139
- 'last_flapped': -1.0,
140
-
141
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
142
-
143
- 'mtu': 1500,
144
-
145
- 'speed': 1000},
146
-
147
- 'GigabitEthernet0/6': {'description': '',
148
-
149
- 'is_enabled': True,
150
-
151
- 'is_up': False,
152
-
153
- 'last_flapped': -1.0,
154
-
155
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
156
-
157
- 'mtu': 1500,
158
-
159
- 'speed': 10},
160
-
161
- 'GigabitEthernet0/7': {'description': '',
162
-
163
- 'is_enabled': True,
164
-
165
- 'is_up': True,
166
-
167
- 'last_flapped': -1.0,
168
-
169
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
170
-
171
- 'mtu': 1500,
172
-
173
- 'speed': 1000},
174
-
175
- 'GigabitEthernet0/8': {'description': '',
176
-
177
- 'is_enabled': True,
178
-
179
- 'is_up': False,
180
-
181
- 'last_flapped': -1.0,
182
-
183
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
184
-
185
- 'mtu': 1500,
186
-
187
- 'speed': 10},
188
-
189
- 'GigabitEthernet0/9': {'description': '',
190
-
191
- 'is_enabled': True,
192
-
193
- 'is_up': False,
194
-
195
- 'last_flapped': -1.0,
196
-
197
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
198
-
199
- 'mtu': 1500,
200
-
201
- 'speed': 10},
202
-
203
- 'Loopback0': {'description': '',
204
-
205
- 'is_enabled': True,
206
-
207
- 'is_up': True,
208
-
209
- 'last_flapped': -1.0,
210
-
211
- 'mac_address': '',
212
-
213
- 'mtu': 1514,
214
-
215
- 'speed': 8000},
216
-
217
- 'Vlan1': {'description': '',
218
-
219
- 'is_enabled': True,
220
-
221
- 'is_up': True,
222
-
223
- 'last_flapped': -1.0,
224
-
225
- 'mac_address': 'xx:xx:xx:xx:xx:xx',
226
-
227
- 'mtu': 1500,
228
-
229
- 'speed': 1000}}
230
-
231
-
232
-
233
- ```

4

修正

2020/11/27 07:38

投稿

eve
eve

スコア19

test CHANGED
@@ -1 +1 @@
1
- ネスト構造の辞書の処理について
1
+ ネスト、入れ子構造の辞書の処理について
test CHANGED
File without changes

3

修正

2020/10/23 07:11

投稿

eve
eve

スコア19

test CHANGED
@@ -1 +1 @@
1
- 多次元の辞書の処理について
1
+ ネスト構造の辞書の処理について
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 以下のような、辞書型のデータを扱っています。
3
+ 以下のような、ネスト構造の辞書型のデータを扱っています。
4
4
 
5
5
  ここから、'is_up'がtrueならばkey(GigabitEthernet0/1など)とそのmac_addressを取り出すという
6
6
 

2

書式の改善

2020/10/23 07:09

投稿

eve
eve

スコア19

test CHANGED
@@ -1 +1 @@
1
- json形式の処理と条件について、2つのjsonファイルの結合
1
+ 多次元辞書型の処理について
test CHANGED
@@ -1,70 +1,64 @@
1
+ ### 前提・実現したいこと
2
+
1
- 以下のように2つjson ファイルがあります。
3
+ 以下のような、辞書型データを扱っています。
2
-
3
- これらは、pythonのライブラリを用いてL2スイッチからsshで情報を取り出し
4
+
4
-
5
- json形式に出力したものです。上のjsonが各インターフェースの情報、下のjsonが
6
-
7
- MACアドレステーブルを出力したものです。(一部省いています)
8
-
9
- これら、二つのファイルから要素を抽出し、上jsonから「is_up」がtrueのものという条件のもと、
10
-
11
- 以下のようなvlanの通信可否をvlanIDと0で表す行列を生成したいです。
12
-
13
- 各インターフェースをノードにとり(is_up:trueのもので物理インターフェース以外(Loopback、Vlan1)を除く)、
14
-
15
- vlanIDが共通で通信可能ならば、そのvlanIDを、vlanIDが異なり、通信不可能ならば0を
16
-
17
- 行列の要素として入れます。Gi0/1はトランクポートです。
18
-
19
- そのために、2つのjson からそれぞれデータを抽出して、
20
-
21
- ひとつのcsvファイル(以下のcsvのイメージ)などに成型してから行列化しようと考えています。
22
-
23
- そこで、「'is_up'」がtrueのものという[条件]の付け方、
24
-
25
- 各jsonからインターフェースごとに要素を取りたい(以下のcsvイメージのように)
26
-
27
- →2つのjsonで「GigabitEthernet0/1「Gi0/1」表記が違→リンクさせる?正規表現・・・?
5
+ ここから、'is_up'がtrueならばkey(GigabitEthernet0/1など)そのmac_addressを取り出す
28
-
29
- 行列の作り方、その際のvlanIDが一致=当該vlanID それ以外=0という要素を行列に挿入する処理など
6
+
30
-
31
- 分からなことだらけです。
7
+ 処理を行たいのです。
8
+
32
-
9
+ そのために、まずは、for文でループさせて'is_up'の要素TrueまたはFalseを取り出し
10
+
33
- 調べてのですが、例がなく、お力をお借したいです
11
+ 一気に判定したいのですが、多次元の辞書型の場合どのように指定するかりません
34
-
35
- 複雑で、抽象的で申し訳ございません。
12
+
36
-
37
- 不明点ございましたら、お聞きください。
38
-
39
- 下の2つのjsonから、下の行列イメージを生成するにはどうすればよいでしょうか。
13
+ jsonファイルに変換してから処理した方が容易でしょうか。
40
14
 
41
15
  アドバイスをお願い致します。
42
16
 
43
17
 
44
18
 
19
+
20
+
45
- [csvイメージ]
21
+ ### 試したこと
46
-
47
- interface,mac_address,vlan
22
+
48
-
49
- Gi0/1,xx:xx:xx:xx:xx:xx,100.200
50
-
51
- Gi0/5,xx:xx:xx:xx:xx:xx,100
52
-
53
- Gi0/7,xx:xx:xx:xx:xx:xx,200
54
-
55
-
56
-
57
- [行列イメージ]
58
-
59
- ×   Gi0/1  Gi0/5  Gi0/7
60
-
61
- Gi0/1  ×   100 200
62
-
63
- Gi0/5 100    × 0
64
-
65
- Gi0/7 200    0    ×
66
-
67
- ```json
23
+ ```python
24
+
25
+ #辞書型のオブジェクトはresultです
26
+
27
+ for k in result[keys][2]():
28
+
29
+ print(k)
30
+
31
+ ```
32
+
33
+
34
+
35
+ ```python
36
+
37
+ for k in result.keys[2]():
38
+
39
+ print(k)
40
+
41
+ ```
42
+
43
+
44
+
45
+ ```python
46
+
47
+ for k in result.values["is_up"]():
48
+
49
+ print(k)
50
+
51
+ ```
52
+
53
+
54
+
55
+
56
+
57
+ ### 補足情報(result)
58
+
59
+ ```
60
+
61
+ #resultをpprintで出力したものです
68
62
 
69
63
  {'GigabitEthernet0/1': {'description': '',
70
64
 
@@ -237,79 +231,3 @@
237
231
 
238
232
 
239
233
  ```
240
-
241
- ```json
242
-
243
- [
244
-
245
- {'active': True,
246
-
247
- 'interface': 'Gi0/7',
248
-
249
- 'last_move': -1.0,
250
-
251
- 'mac': 'xx:xx:xx:xx:xx:xx',
252
-
253
- 'moves': -1,
254
-
255
- 'static': False,
256
-
257
- 'vlan': 200},
258
-
259
- {'active': True,
260
-
261
- 'interface': 'Gi0/1',
262
-
263
- 'last_move': -1.0,
264
-
265
- 'mac': 'xx:xx:xx:xx:xx:xx',
266
-
267
- 'moves': -1,
268
-
269
- 'static': False,
270
-
271
- 'vlan': 100,200},
272
-
273
- {'active': True,
274
-
275
- 'interface': 'Gi0/1',
276
-
277
- 'last_move': -1.0,
278
-
279
- 'mac': 'xx:xx:xx:xx:xx:xx',
280
-
281
- 'moves': -1,
282
-
283
- 'static': False,
284
-
285
- 'vlan': 100,200},
286
-
287
- {'active': True,
288
-
289
- 'interface': 'Gi0/1',
290
-
291
- 'last_move': -1.0,
292
-
293
- 'mac': 'xx:xx:xx:xx:xx:xx',
294
-
295
- 'moves': -1,
296
-
297
- 'static': False,
298
-
299
- 'vlan': 100,200},
300
-
301
- {'active': True,
302
-
303
- 'interface': 'Gi0/5',
304
-
305
- 'last_move': -1.0,
306
-
307
- 'mac': 'xx:xx:xx:xx:xx:xx',
308
-
309
- 'moves': -1,
310
-
311
- 'static': False,
312
-
313
- 'vlan': 100}]
314
-
315
- ```

1

文法の修正

2020/10/23 06:54

投稿

eve
eve

スコア19

test CHANGED
File without changes
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  [csvイメージ]
46
46
 
47
- interface,mac,vlan
47
+ interface,mac_address,vlan
48
48
 
49
49
  Gi0/1,xx:xx:xx:xx:xx:xx,100.200
50
50