Python 当条目具有相同名称时添加

Python add when entries have the same name

我有一个出版登记销售的模型house.with下面的代码,我可以得到书名和客户购买的数量:

a=Sale.objects.all()
    for b in a:
        print(str(b.book) + ' ' + str(b.quantity))

所以我得到这样的结果:

Del mismo modo en el sentido contrario 15
Sobre el horror 1
Del mismo modo en el sentido contrario 5
Del mismo modo en el sentido contrario 2
Un lápiz labial para una momia 1
La cólera en los tiempos del amor 3
La cólera en los tiempos del amor 1
La cólera en los tiempos del amor 1
El tambor encantado 1

我现在需要的是一个循环,这样每个具有相同书名的条目,总和或加上那个数量。关于如何实现这一点有什么想法吗?

对于 Django,要完全在数据库中执行此操作,听起来您需要 aggregation using .values():

for book, total_sales in Sale.objects.values('book').annotate(total_sales=Sum('quantity')).values_list('book', 'total_sales'):
    print(book, total_sales)

一般情况下,如果这不仅仅是关于 Django,是使用 collections.Counter:

books_sold = collections.Counter()
for sale in Sale.objects.all():
    books_sold[str(sale.book)] += b.quantity
for book, quantity in books_sold.items():
    print(book, quantity)

如果 bookForeignKeyBook 模型,那么 .annotate(…) [Django-doc] 更有意义 Book

from django.db.models import Sum

books = Book.objects.annotate(
    <strong>total_quantity=Sum('sale__quantity')</strong>
)

for book in books:
    print(f'{book} {book.total_quantity}')