I'm typing 3 list of loops, and I need return dict like in docstring. And it's wrong. How can I solve problem?
For each period you have to count incomes and expenses and total occurrence.
Sample of dict looks like below:
[
{
"package": "FLEXIBLE",
"created": "2020-03-10T00:00:00",
"summary": [
{
"period": "2019-12",
"documents": {
"incomes": 63,
"expenses": 13
}
},
{
"period": "2020-02",
"documents": {
"incomes": 45,
"expenses": 81
}
}
]
},
{
"package": "ENTERPRISE",
"created": "2020-03-19T00:00:00",
"summary": [
{
"period": "2020-01",
"documents": {
"incomes": 15,
"expenses": 52
}
},
{
"period": "2020-02",
"documents": {
"incomes": 76,
"expenses": 47
}
}
]
}
]
Code for the task is here:
def task_2(data_in):
'''
Return number of documents per period (incomes, expenses, total).
ex. {
'2020-04': {
'incomes': 2480,
'expenses': 2695,
'total': 5175
},
'2020-05': {
'incomes': 2673,
'expenses': 2280,
'total': 4953
}
}
'''
period = []
for term in data_in:
for dict_val in term['summary']:
if dict_val['period'] in period:
continue
else:
period.append(dict_val['period'])
incomes = []
for term in data_in:
for dict_val in term['summary']:
incomes.append(dict_val['documents']['incomes'])
expenses = []
for term in data_in:
for dict_val in term['summary']:
expenses.append(dict_val['documents']['expenses'])
# dict_keys = ['incomes', 'expenses', 'total']
# list1 = [{k: v for k, v in zip(dict_keys, range(len(incomes)))}]
# return {k: v for k, v in zip(period, list1)}
return {per: {"incomes": inc, "expenses": exp, "total": inc + exp} for per, inc, exp in
zip(period, range(len(incomes)), range(len(expenses)))}
I'm typing loops in dict but returns:
{'2019-12': {'incomes': 1, 'expenses': 1, 'total': 2},
'2020-02': {'incomes': 2, 'expenses': 2, 'total': 4}}
you need to track the period and save income, expenses, total
data = [
{
"package": "FLEXIBLE",
"created": "2020-03-10T00:00:00",
"summary": [
{
"period": "2019-12",
"documents": {
"incomes": 63,
"expenses": 13
}
},
{
"period": "2020-02",
"documents": {
"incomes": 45,
"expenses": 81
}
}
]
},
{
"package": "ENTERPRISE",
"created": "2020-03-19T00:00:00",
"summary": [
{
"period": "2020-01",
"documents": {
"incomes": 15,
"expenses": 52
}
},
{
"period": "2020-02",
"documents": {
"incomes": 76,
"expenses": 47
}
}
]}]
records = [record for records in data for record in records['summary'] ]
result = {}
template = {
"incomes": 0,
"expenses": 0,
"total": 0
}
for record in records:
period = record['period']
if period not in result:
result[period] = {"incomes": 0,"expenses": 0,"total": 0}
income = record['documents']['incomes']
expense = record['documents']['expenses']
total = income + expense
result[period]['incomes'] += income
result[period]['expenses'] += expense
result[period]['total'] += total
print(result)
# output -> {'2019-12': {'incomes': 63, 'expenses': 13, 'total': 76}, '2020-02': {'incomes': 121, 'expenses': 128, 'total': 249}, '2020-01': {'incomes': 15, 'expenses': 52, 'total': 67}}