私は現在、Pythonにネストされた辞書オブジェクトを持っています。これをループして、基本的にhtmlテーブルを作成します。何をすべきかについての基本はすでに知っていますが、各列がまたがる行数を決定するための支援が必要です。例を挙げて詳しく説明しましょう。
Input:
{
"system":{
"System Apps":{
"SystemEnv":[
'App Test',
'App Memory',
'App Test']
"SystemEnv2":{
"System Test":[
'App Test']
}},
"System Memory":{
"Memeory Test":[
'Memory Func',
'Apes Test']
}
}
}
}
}
問題は、rowspan属性を配置し、スパンする行の数が正しいことにあります。親の子の数だとは思いますが、コーディングの仕方がわかるようです。
また、2番目の優先事項ですが、誰かがこれを行うためのより効率的な方法を見つけた場合は、私に知らせてください。
for level1 in dictObj:
html += "<tr>"
html += '<td>{}</td>'.format(level1)
for level2 in dictObj[level1]:
if not first_run:
html += "<tr>"
html += '<td>{}</td>'.format(level2)
first_run = True
for level3 in dictObj[level1][level2]:
if not first_run:
html += "<tr>"
html += '<td>{}</td>'.format(level3)
first_run = True
for app in dictObj[level1][level2][level3]:
if not first_run:
html += "<tr>"
first_run = True
for test in dictObj[level1][level2][level3][app]:
if not first_run:
html += "<tr>"
html += '<td>{}</td>'.format(test)
html += '<td>{}</td>'.format(app)
html += '<td>{}</td>'.format('mb')
html += '<td>{}</td>'.format(1)
html += '</tr>'
first_run = False
あなたが提供したデータは不完全であるように思われるので、キーが[System][System Apps][SystemEnv2][System Test][App Test]
突き出ています(最も長く、他のすべてのキーは1つ短くなっています):
data = {
"system":{
"System Apps":{
"SystemEnv":[
'App Test',
'App Memory',
'App Test'],
"SystemEnv2":{
"System Test":[
'App Test']
}
},
"System Memory":{
"Memeory Test":[
'Memory Func',
'Apes Test']
}
}
}
# }
# }
def num_items(d):
if isinstance(d, list):
for i in d:
for ii in num_items(i):
yield ii
elif isinstance(d, dict):
for k, v in d.items():
for ii in num_items(v):
yield ii
else:
yield 1
def traverse(d, cur=[]):
if isinstance(d, list):
for i in d:
cur.append( (i, sum(num_items(i))) )
for ii in traverse(i, cur):
yield ii
elif isinstance(d, dict):
for k, v in d.items():
cur.append( (k, sum(num_items(v))) )
for ii in traverse(v, cur):
yield ii
else:
yield cur
del cur[:]
print('<table border=4>')
for row in traverse(data):
print('<tr>')
for td, rowspan in row:
print('<td rowspan={}>{}</td>'.format(rowspan, td))
print('</tr>')
print('</table>')
プリント:
<table border=4>
<tr>
<td rowspan=6>system</td>
<td rowspan=4>System Apps</td>
<td rowspan=3>SystemEnv</td>
<td rowspan=1>App Test</td>
</tr>
<tr>
<td rowspan=1>App Memory</td>
</tr>
<tr>
<td rowspan=1>App Test</td>
</tr>
<tr>
<td rowspan=1>SystemEnv2</td>
<td rowspan=1>System Test</td>
<td rowspan=1>App Test</td>
</tr>
<tr>
<td rowspan=2>System Memory</td>
<td rowspan=2>Memeory Test</td>
<td rowspan=1>Memory Func</td>
</tr>
<tr>
<td rowspan=1>Apes Test</td>
</tr>
ブラウザでは次のようになります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加