Список словарей в python в формате таблицы HTML

У меня есть список словарей в формате ниже

[{'duration': 0.7, 'project_id': 3, 'resource': u'Arya Stark', 'activity': u'Development'},
{'duration': 0.9, 'project_id': 4, 'resource': u'Ned Stark', 'activity': u'Development'},
{'duration': 2.88, 'project_id': 7, 'resource': u'Robb Stark', 'activity': u'Development'},
{'duration': 0.22, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 0.3, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 2.15, 'project_id': 3, 'resource': u'Arya Stark', 'activity': u'Practise'},
{'duration': 3.35, 'project_id': 4, 'resource': u'Sansa Stark', 'activity': u'Development'},
{'duration': 2.17, 'project_id': 9, 'resource': u'Rickon Stark', 'activity': u'Development'},
{'duration': 1.03, 'project_id': 4, 'resource': u'Benjan Stark', 'activity': u'Design'},
{'duration': 1.77, 'project_id': 4, 'resource': u'Bran Stark', 'activity': u'Testing'},
{'duration': 1.17, 'project_id': 4, 'resource': u'Ned Stark', 'activity': u'Development'},
{'duration': 0.17, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 1.77, 'project_id': 3, 'resource': u'catelyn stark', 'activity': u'Development'},
{'duration': 0.3, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 0.45, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'}]

Все, что мне нужно, это создать таблицу в python, например

report_table = """<table>
.........
...........
..........
</table>"""

Итак, формат таблицы прилагается,

введите сюда описание изображения 1) Есть возможность Привести в нужном формате

2) Можем ли мы выполнить операцию суммирования внутри данных словаря?


person Vigneshwaran Thenraj    schedule 09.06.2016    source источник
comment
1) Да. Вы можете легко просто создать HTML-страницу и вставить столбцы и строки по мере необходимости. 2) Да, вы можете выполнять операцию суммирования внутри словаря.   -  person HEADLESS_0NE    schedule 09.06.2016
comment
Ответ на вопрос 1: ДА Ответ на вопрос 2: ДА (если я правильно его понял) Покажите код, усилия, точную спецификацию, если хотите больше полезных ответов   -  person Serge Ballesta    schedule 09.06.2016
comment
Конечно, я добавлю свой вклад в это   -  person Vigneshwaran Thenraj    schedule 09.06.2016


Ответы (1)


IIUC Вот решение, использующее pandas:

import pandas as pd
dict_data = [{'duration': 0.7, 'project_id': 3, 'resource': u'Arya Stark', 'activity': u'Development'},
{'duration': 0.9, 'project_id': 4, 'resource': u'Ned Stark', 'activity': u'Development'},
{'duration': 2.88, 'project_id': 7, 'resource': u'Robb Stark', 'activity': u'Development'},
{'duration': 0.22, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 0.3, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 2.15, 'project_id': 3, 'resource': u'Arya Stark', 'activity': u'Practise'},
{'duration': 3.35, 'project_id': 4, 'resource': u'Sansa Stark', 'activity': u'Development'},
{'duration': 2.17, 'project_id': 9, 'resource': u'Rickon Stark', 'activity': u'Development'},
{'duration': 1.03, 'project_id': 4, 'resource': u'Benjan Stark', 'activity': u'Design'},
{'duration': 1.77, 'project_id': 4, 'resource': u'Bran Stark', 'activity': u'Testing'},
{'duration': 1.17, 'project_id': 4, 'resource': u'Ned Stark', 'activity': u'Development'},
{'duration': 0.17, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 1.77, 'project_id': 3, 'resource': u'catelyn stark', 'activity': u'Development'},
{'duration': 0.3, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'},
{'duration': 0.45, 'project_id': 9, 'resource': u'Jon Snow', 'activity': u'Support'}]

df = pd.DataFrame(dict_data)
dfg = df.groupby(['project_id','resource','activity']).sum()
dfg.to_html('result.html')

Выдаст такой html:

введите описание изображения здесь

И еще одно решение с использованием pandas pivot_table с другой результат:

import numpy as np

pvt = pd.pivot_table(df, values=['duration'],index=['project_id','resource'], columns=['activity'], aggfunc=np.sum,margins=True, fill_value=0)
pvt.to_html('result2.html')

введите описание изображения здесь

Измените общий порядок проекта. Измените порядок столбцов и индексов, чтобы получить желаемый результат.

import numpy as np
pvt = pd.pivot_table(df, values=['duration'],index=['resource','activity'], columns=['project_id'], aggfunc=np.sum,margins=True, fill_value=0)

введите описание изображения здесь

person Abbas    schedule 09.06.2016
comment
Не могли бы вы подсказать мне, как получить мудрое суммирование проекта, например, общая продолжительность, потраченная в project_id 3, равна сумме (2,85 + 1,77) и составляет 4,62. - person Vigneshwaran Thenraj; 10.06.2016
comment
Обновлено решение, вы можете изменить индекс и столбцы для получения желаемого результата. - person Abbas; 10.06.2016