是否有任何(现有的)方法在ipython笔记本中将python字典显示为html表。说我有一本字典
d = {'a': 2, 'b': 3}
然后我跑
magic_ipython_function(d)
给我一些像
的东西
答案 0 :(得分:12)
答案 1 :(得分:12)
您可以编写自定义函数来覆盖默认的_repr_html_
函数。
class DictTable(dict):
# Overridden dict class which takes a dict in the form {'a': 2, 'b': 3},
# and renders an HTML Table in IPython Notebook.
def _repr_html_(self):
html = ["<table width=100%>"]
for key, value in self.iteritems():
html.append("<tr>")
html.append("<td>{0}</td>".format(key))
html.append("<td>{0}</td>".format(value))
html.append("</tr>")
html.append("</table>")
return ''.join(html)
然后,使用它:
DictTable(d)
输出将是:
如果您要处理更大的数据(数千项),请考虑使用pandas。
答案 2 :(得分:5)
工作代码:在Python 2.7.9和Python 3.3.5中测试
在[1]中:
List
Out [1]:
获取生成的html:
在[2]中:
from ipy_table import *
# dictionary
dict = {'a': 2, 'b': 3}
# lists
temp = []
dictList = []
# convert the dictionary to a list
for key, value in dict.iteritems():
temp = [key,value]
dictList.append(temp)
# create table with make_table
make_table(dictList)
# apply some styles to the table after it is created
set_column_style(0, width='100', bold=True, color='hsla(225, 80%, 94%, 1)')
set_column_style(1, width='100')
# render the table
render()
Out [2]:
render()._repr_html_()
的参考文献:强>
http://epmoyer.github.io/ipy_table/
http://nbviewer.ipython.org/github/epmoyer/ipy_table/blob/master/ipy_table-Introduction.ipynb
http://nbviewer.ipython.org/github/epmoyer/ipy_table/blob/master/ipy_table-Reference.ipynb
答案 3 :(得分:3)
这样做的方法,但无可否认是一种hacky方式,是使用 json2html
from json2html import *
from IPython.display import HTML
HTML(json2html.convert(json = {'a':'2','b':'3'}))
但它需要第三方库
答案 4 :(得分:3)
我不会说大熊猫是一种矫枉过正的行为,因为你可能会使用DataFrame作为dict等等。
无论如何,你可以这样做:
pd.DataFrame.from_dict(d, orient="index")
或
pd.DataFrame(d.values(), index=d.keys())
答案 5 :(得分:1)
IPython Notebook将使用方法_repr_html_
呈现具有_repr_html_
方法的任何对象的HTML输出
import markdown
class YourClass(str):
def _repr_html_(self):
return markdown.markdown(self)
d = {'a': 2, 'b': 3}
rows = ["| %s | %s |" % (key, value) for key, value in d.items()]
table = "------\n%s\n------\n" % ('\n'.join(rows))
YourClass(table)
此解决方案需要第三方库markdown
答案 6 :(得分:1)
如果您以后想要将HTML模板外部化并保留控件,最好使用模板引擎。为此,您可以使用Jinja(这在Python中几乎是一个标准)。
from jinja2 import Template
from IPython.display import HTML
d = {'a': 2, 'b': 3}
# content of the template that can be externalised
template_content = """
<table>
{% for key, value in data.items() %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
</table>"""
template = Template(template_content)
# template rendering embedded in the HTML representation
HTML(template.render(data=d))
答案 7 :(得分:0)
一种方法...
from IPython.display import HTML, display
def print_dict_as_html_table(some_dict):
# create a list that will hold the html content
# initialise with the <table> tag
html_list = ["<table>"]
#iterate through the dictionary, appending row and element tags to the list
for key in some_dict.keys():
html_list.append("<tr>")
html_list.append("<td>{0}</td>".format(key))
html_list.append("<td>{0}</td>".format(some_dict[key]))
html_list.append("</tr>")
# add the final </table> tag to the list
html_list.append("</table>")
# create a string from the list
html_string = ' '.join([str(elem) for elem in html_list])
#display the html
display(HTML(html_string))
dict1 = {1: 2, "foo": "bar", "cat": "dog"}
print_dict_as_html_table(dict1)
输出图像: