Обновление ключа конкретной дикты в дикте диктов
Я создаю словарь словарей, а затем пытаюсь обновить определенный ключ с помощью цикла for. однако, все ключи обновляются.
код выглядит следующим образом:
transactions = Transaction.objects.all()
unique_sellers = ['A002638841D', 'A09876543456']
seller_summary={}
summary = {
'total_loan_amount': 0,
'gross_incentive': 0,
}
for each in unique_sellers:
seller_summary[each] = summary
seller_summary[each]['total_loan_amount'] = transactions.filter(channel_seller__pin_no = each).aggregate(total_loan_amount=Sum('loan_amount'))['total_loan_amount']
print(seller_summary)
общая сумма_кредита для A002638841D составляет 1500
сумма_кредита для A09876543456 составляет 2000
Мои ожидания - вывод print(seller_summary) должен быть {'A002638841D': {'total_loan_amount': 1500, 'gross_incentive': 0,}, 'A09876543456': { 'total_loan_amount': 2000, 'gross_incentive': 0,}}
Однако, я получаю вывод следующим образом, мои ожидания - вывод {'A002638841D': {'total_loan_amount': 2000, 'gross_incentive': 0,}, 'A09876543456': { 'total_loan_amount': 2000, 'gross_incentive': 0,}}
total_loan_amount is both the dict is getting updated as 2000 instead of 1500 and 2000 respectively
Когда вы назначаете дикту summary для каждого ключа, summary является ссылкой на исходную переменную summary, поэтому вы дважды обновляете одну и ту же дикту.
Возможно, вы могли бы попробовать
transactions = Transaction.objects.all()
unique_sellers = ['A002638841D', 'A09876543456']
seller_summary={}
def get_summary(): # create a new reference each time instead of using the same one
return {
'total_loan_amount': 0,
'gross_incentive': 0,
}
for each in unique_sellers:
seller_summary[each] = get_summary()
# EDIT: Or like said in comments, simply create the dict reference here :
# seller_summary[each] = { 'total_loan_amount': 0, 'gross_incentive': 0,}
seller_summary[each]['total_loan_amount'] = transactions.filter(channel_seller__pin_no = each).aggregate(total_loan_amount=Sum('loan_amount'))['total_loan_amount']
print(seller_summary)