Данные словаря неправильно добавлены в другой словарь - PullRequest
0 голосов
/ 03 мая 2018

Данные словаря неправильно добавлены в другой словарь. Здесь acc_grp - это сгруппированные данные панд.

acc_grp

      amount_currency     balance    credit      debit     lid
ldate                                                               
2018-04-01              0.0  -27359.250  30219.25  1115.0000  643259
2018-04-02              0.0 -208574.742   5000.00  1194.0005  872275

Здесь template_dict - это мой словарь. Когда я печатаю result, обе строки моего acc_grp правильно доступны.

Поток (от терминала)

результат (1-я итерация)

{'date': '2018-04-01', 'credit': 30219.25, 'balance': -29104.25, 'debit': 1115.0}

template_dict

{'code': u'300103', 'lines': [{'date': '2018-04-01', 'credit': 30219.25, 'balance': -29104.25, 'debit': 1115.0}], 'name': u'CASH COLLECTION'}

В первом случае result правильно добавлено к template_dict.

результат (2-я итерация)

{'date': '2018-04-02', 'credit': 5000.0, 'balance': -3805.9994999999999, 'debit': 1194.0005}

template_dict

{'code': u'300103', 'lines': [{'date': '2018-04-02', 'credit': 5000.0, 'balance': -3805.9994999999999, 'debit': 1194.0005}, {'date': '2018-04-02', 'credit': 5000.0, 'balance': -3805.9994999999999, 'debit': 1194.0005}], 'name': u'CASH COLLECTION'}

Здесь, когда мы смотрим, значение template_dict lines должно быть result1, result2, но данные поступают как result2, result2.

код

                result = {}
                template_dict = dict()
                template_dict['lines'] = []
                template_dict['code'] = line['code']
                template_dict['name'] = line['name']
                for index,row in acc_grp.iterrows():
                    balance=0
                    row.balance=row.debit.item()-row.credit.item()
                    result['date']=row.name
                    result['debit']=row.debit.item()
                    result['credit']=row.credit.item()
                    result['balance']=row.balance
                    print result
                    template_dict['lines'].append(result)
                    print template_dict

1 Ответ

0 голосов
/ 03 мая 2018

Вам необходимо создать новый словарь для каждой строки. В противном случае вы всегда меняете один и тот же словарь:

            ...
            for index,row in acc_grp.iterrows():
                result = {}  # Create a brand new dictionary
                balance=0
                row.balance=row.debit.item()-row.credit.item()
                result['date']=row.name
                ...
                template_dict['lines'].append(result)
...