Django从查询集列表创建列表
我有一个来自Django查询集的对象列表,比如说:
my_list = MyObject.objects.filter(variable=something)
这些对象叫做MyObject,它里面有一个字段叫做year,表示特定的年份,比如2005年、2007年、2009年。
我想把这个列表(my_list)变成一个字典,字典的键是年份,值是对应年份的所有MyObject对象。例如:
my_dict['2005'] = list of objects from my_list which match year = 2005
my_dict['2006'] = list of objects from my_list which match year = 2006
my_dict['2007'] = list of objects from my_list which match year = 2007
my_dict['2008'] = list of objects from my_list which match year = 2008
有没有人能告诉我最好的方法来做到这一点?我已经搞定了第一步,比如获取my_list。我只需要把它按年份分开。我尝试自己写,但用了很多循环和数据库查询,效率很低。
谢谢!
2 个回答
4
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不知道问题出在哪里。
通常,解决这类问题的方法是仔细检查代码,看看有没有写错的地方,或者是否遗漏了什么重要的步骤。有时候,查看相关的文档或教程也能帮助我们找到答案。
另外,向其他人请教也是一个不错的选择。比如在像StackOverflow这样的网站上,很多人会分享他们的经验和解决方案,这样我们就能从中学习到更多的知识。
总之,遇到问题时,不要着急,慢慢分析,寻找解决办法,最终你会找到答案的。
import collections
mydict = collections.defaultdict(list)
for obj in my_list:
mydict[obj.year].append(obj)
1
(不要把查询集叫做'my_list',因为它实际上不是一个列表,而是一个查询集。可以叫它'my_objects'之类的名字。)
my_dict = {}
for obj in my_objects:
my_dict.setdefault(obj.year, []).append(obj)