python:将字典序列化为简单的html输出
问题内容:
使用应用程序引擎-是的,我对Django模板和其他模板引擎一无所知。
可以说我有一个字典或一个简单的对象,我不知道它的结构,我想将其序列化为html。
所以如果我有
{'data':{'id':1,'title':'home','address':{'street':'some road','city':'anycity','postal':'somepostal'}}}
我想要的是使用列表或表格以某种形式的可读html呈现的内容;
data:
id:1
title:home
address:
street: some road
city: anycity
postal:somepostal
现在我知道我能做
for key in dict.items
print dict[key]
但这不会深入到子值中,并且当键/值是字典时(即地址字典)列出每个键,值对。
他们的模块是python的轻量级/快速模块,可以很好地做到这一点。还是有人可以粘贴任何简单的代码来做到这一点。
解决 方案这里的所有解决方案都很有用。毫无疑问,pprint是打印字典的更稳定的方法,尽管它没有返回html附近的任何内容。虽然仍然可以打印。
我现在结束了:
def printitems(dictObj, indent=0):
p=[]
p.append('<ul>\n')
for k,v in dictObj.iteritems():
if isinstance(v, dict):
p.append('<li>'+ k+ ':')
p.append(printitems(v))
p.append('</li>')
else:
p.append('<li>'+ k+ ':'+ v+ '</li>')
p.append('</ul>\n')
return '\n'.join(p)
它将dict转换成无序列表,现在可以了。一些CSS,也许稍作调整,应使其可读。
我将奖励编写上述代码的人的答案,由于无序列表未嵌套,我进行了一些小更改。我希望所有人都同意,所提供的许多解决方案都证明是有用的。但是,即使是粗略的代码,上面的代码也呈现了字典的真实html表示。
问题答案:
pyfunc制作的示例可以轻松修改以生成简单的嵌套html列表。
z = {'data':{'id':1,'title':'home','address':{'street':'some road','city':'anycity','postal':'somepostal'}}}
def printItems(dictObj, indent):
print ' '*indent + '<ul>\n'
for k,v in dictObj.iteritems():
if isinstance(v, dict):
print ' '*indent , '<li>', k, ':', '</li>'
printItems(v, indent+1)
else:
print ' '*indent , '<li>', k, ':', v, '</li>'
print ' '*indent + '</ul>\n'
printItems(z,0)
当然不是很漂亮,但是也许可以从某个地方开始。如果您要做的只是可视化数据,那么pprint模块确实足够了。您可以在pprint的结果上使用“
pre”标签,然后将其放在您的网页上。
pprint版本如下所示:
import pprint
z = {'data':{'id':1,'title':'home','address':{'street':'some road','city':'anycity','postal':'somepostal'}}}
print '<pre>', pprint.pformat(z), '</pre>'
和html输出看起来像这样:
{'data': {'address': {'city': 'anycity',
'postal': 'somepostal',
'street': 'some road'},
'id': 1,
'title': 'home'}}
这是不是 说 漂亮,但它至少说明以更结构化的方式的数据。