Словарь Python как таблица html в записной книжке ipython

Есть ли (существующий) способ отображения словаря python в виде html-таблицы в ipython-ноутбуке. Скажем, у меня есть словарь

d = {'a': 2, 'b': 3}

тогда я запустил

magic_ipython_function(d)

чтобы дать мне что-то вроде

enter image description here

Ответы

Ответ 1

Вы можете написать настраиваемую функцию для переопределения функции _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)

Выход будет: Sample Output of DictTable

Если вы собираетесь обрабатывать гораздо большие данные (тысячи элементов), подумайте о том, чтобы перейти с pandas.

Источник идеи: Сообщение в блоге ListTable

Ответ 2

Вероятно, вы ищете что-то вроде ipy_table.

Другой способ - использовать pandas для фреймворка данных, но это может быть перебор.

Ответ 3

Рабочий код: Протестировано в Python 2.7.9 и Python 3.3.5

В [1]:

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 [1]:

table screenshot


Получить сгенерированный html:

В [2]:

render()._repr_html_()

Out [2]:

'<table border="1" cellpadding="3" cellspacing="0"  style="border:1px solid black;border-collapse:collapse;"><tr><td  style="background-color:hsla(225, 80%, 94%, 1);width:100px;"><b>a</b></td><td  style="width:100px;">2</td></tr><tr><td  style="background-color:hsla(225, 80%, 94%, 1);width:100px;"><b>b</b></td><td  style="width:100px;">3</td></tr></table>'


Литература:
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

Ответ 4

Способ сделать это, но, по общему признанию, хакерским способом - использовать json2html

from json2html import *
from IPython.display import HTML
HTML(json2html.convert(json = {'a':'2','b':'3'}))

но ему нужна сторонняя библиотека

Ответ 5

IPython Notebook будет использовать метод _repr_html_ для визуализации вывода HTML любого объекта, имеющего метод _repr_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

Я бы не сказал, что pandas является излишним, поскольку вы можете использовать DataFrame как dict, между прочим.

В любом случае, вы можете:

pd.DataFrame.from_dict(d, orient="index")

или

pd.DataFrame(d.values(), index=d.keys())