gpt4 book ai didi

python - 更新查询集会在 python/django 中迭代时引发错误

转载 作者:行者123 更新时间:2023-12-05 06:59:46 25 4
gpt4 key购买 nike

我有一个有序的查询,我想将其附加到列表中,然后根据价格拆分为子列表。我的代码如下:

def home(books):

grouped_books = []

for i in range(len(books) - 1):
this_book = books[i].price
next_book = books[i+1].price

if this_book != next_book and price >= 100:
r = books[:i+1]
grouped_books.append(r)
for ob in grouped_books:
books = books.exclude(id__in=[o.id for o in ob])

在更新查询后进行迭代时,此代码会抛出一个错误:list index is out of range

我是不是做错了什么?我很感激你的帮助。谢谢!

最佳答案

QuerySet 不是列表。所以使用 books[:i+1] 没有多大意义。此外,您更改 书籍。实际上,您编写了 books = books.exclude(...)。因此,这意味着如果您减少 books 查询集中的元素数量,索引最终将超出范围。请注意,range(len(books) - 1) 部分仅在 for 循环的开始 处计算。因此它不会更新。

我认为你把事情搞得太复杂了。您可以通过price 查询您订购书籍的位置,然后使用groupby(…) [Python-doc] :

from itertools import groupby
from operator import attrgetter

def home(books):
return [
list(vs)
for __, vs in <b>groupby(</b>books.order_by('price'), attrgetter('price')<b>)</b>
]

或者如果您想要按 100 的价格范围进行分组:

from itertools import groupby

def home(books):
return [
list(vs)
for __, vs in groupby(books.order_by('price'), <b>lambda b: b.price // 100</b>)
]

关于python - 更新查询集会在 python/django 中迭代时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64320349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com