我从教程学习Django和Python,大多数时候不同版本的Django或Python之间存在错误。
我遇到了这个问题"无法解决的类型:complex()<络合物()"因为这个:
def top_stories(top=180, consider=1000):
latest_stories = Story.objects.all().order_by('-created_at')[:consider]
ranked_stories = sorted([(score(story), story) for story in latest_stories], reverse=True)
return [story for score, story in ranked_stories][:top]
我找到了一个解决方案: 使用关键功能为商店提供分数:
ranked_stories = sorted(latest_stories, key=score, reverse=True)
return ranked_stories[:top]
这消除了您正在使用的decorate-sort-undecorate模式的需要,并且愉快地避免了在没有订购支持的情况下比较单个Story实例。
但是,它仍然给了我一个错误。这个新的解决方案不能与新的Django / Python版本相媲美吗?
答案 0 :(得分:1)
是的,它已经改变了一点。现在,您必须为排序指定lambda
,因为键必须是可调用的。
使用lambda
使得它可以在您正在使用的可迭代对象的每个项目上进行调用 - 确保key
可以在您自己的类的任何类型的对象实例中使用。
尝试以下方法:
ranked_stories = sorted(latest_stories, key=lambda story: store.score(), reverse=True)
您可以使用score
对象将其设置为复杂,并且lambda