我发现并修改了一些代码,这些代码可循环访问嵌套字典并生成HTML,该HTML列出了嵌套字典中的所有键和值。代码还可以,但是我想改进一些地方:
<li>employees.1.forename.'Jack'</li>
<li>employees.1.surname.'Smith'</li>
<li>employees.1.address.AddressLine1.'59 Never Street'</li>
<li>employees.1.address.AddressLine2.'Flat 10'</li>
<li>employees.1.address.PostTown.'London'</li>
<li>employees.1.address.Postcode.'E1 1AB'</li>
<li>employees.2.forename.'Kate'</li>
<li>employees.2.surname.'Jones'</li>
<li>employees.2.address.AddressLine1.'29 Acacia Avenue'</li><li>employees.2.address.AddressLine2.None</li>
<li>employees.2.address.PostTown.'London'</li>
<li>employees.2.address.Postcode.'N10 2BC'</li>
理想情况下,这些字段将以更具可读性的嵌套格式列出,如下所示:
<ul>
<li>employees:</li>
<ul>
<li>1:</li>
<ul>
<li>forename:'Jack'</li>
<li>surname: 'Smith'</li>
<li>address:
<ul>
<li>AddressLine1:'59 Never Street'</li>
<li>AddressLine2:'Flat 10'</li>
<li>PostTown: 'London'</li>
<li>Postcode:'E10 1AB'</li>
</ul>
</ul>
</ul>
<ul>
<li>1:</li>
<ul>
<li>forename:'Kate'</li>
<li>surname: 'Jones'</li>
<li>address:
<ul>
<li>AddressLine1:'29 Acacia Avenue'</li>
<li>AddressLine2: None</li>
<li>PostTown: 'London'</li>
<li>Postcode:'N10 2BC'</li>
</ul>
</ul>
</ul>
</ul>
d = {
'employees':
{
'1':
{
'forename': 'Jack',
'surname': 'Smith',
'address':
{
'AddressLine1': '59 Never Street',
'AddressLine2': 'Flat 10',
'PostTown': 'London',
'Postcode': 'E1 1AB'
}
},
'2':
{
'forename': 'Kate',
'surname': 'Jones',
'address':
{
'AddressLine1': '29 Acacia Avenue',
'AddressLine2': None,
'PostTown': 'London',
'Postcode': 'N10 2BC'
}
}
}
}
def print_dict(v, prefix='<li>'):
global out
if isinstance(v, dict):
for k, v2 in v.items():
p2 = "{}{}.".format(prefix, k)
print_dict(v2, p2)
else:
try: out = str(out) + prefix + repr(v) + '</li>'
except: out = prefix + repr(v) + '</li>'
return out
print(print_dict(d))
答案 0 :(得分:2)
获得所需输出的一种可能解决方案是使用yattag:
T[]
它还显示了如何摆脱使用this
关键字的麻烦-将变量作为参数传递给函数。
另一种选择是使用类。
如果您不想使用外部库:
<a @click.prevent="showModal($event)" :href="extcontacturl">Contact Us</a>
两个选项的格式化输出如下所示: 格式化的输出如下所示:
>>> from yattag import Doc
>>> doc, tag, text = Doc().tagtext()
>>> d = { ... }
>>>
>>> def f(d, tag, text):
... with tag('ul'):
... for k,v in d.items():
... if type(v) == dict:
... with tag('li'):
... text(k)
... f(v, tag, text)
... else:
... with tag('li'):
... text(f"{k}: '{v}'")
...
>>> f(d, tag, text)
>>>
>>> doc.getvalue()
"<ul><li>employees</li><ul><li>1</li><ul><li>forename: 'Jack'</li><li>surname: 'Smith'</li><li>address</li><ul><li>AddressLine1: '59 Never Street'</li><li>AddressLine2: 'Flat 10'</li><li>PostTown: 'London'</li><li>Postcode: 'E1 1AB'</li></ul></ul><li>2</li><ul><li>forename: 'Kate'</li><li>surname: 'Jones'</li><li>address</li><ul><li>AddressLine1: '29 Acacia Avenue'</li><li>AddressLine2: 'None'</li><li>PostTown: 'London'</li><li>Postcode: 'N10 2BC'</li></ul></ul></ul></ul>"