【发布时间】:2011-01-04 12:43:01
【问题描述】:
我有一个包含模型元素实例的查询集“元素”。元素有一个外键“系列”,每个系列都有字段:
subtopic_1_name
subtopic_1_slug
subtopic_2_name
subtopic_2_slug
subtopic_3_name
subtopic_3_slug
我需要生成一个“扁平化”形式的字典列表
[{'name': 'somename', 'slug': 'someslug'}, {'name': 'anothername' 'slug': 'anotherslug'}, ... ]
其中 'name' 和 'slug' 对应于三个 name 和 slug 字段中的唯一值,不包括空字符串。我目前正在使用一个低效的 for 循环和'not in'来检查唯一性。它可以工作,但是太慢了,因为“元素”最多可以有 190 万个成员。
什么是有效的方法?
更新:
这是我目前最好的方法,但必须有更快的方法:
subtopic_list = []
ones = elements.values_list('series__subtopic1_name', 'series__subtopic1_slug').distinct()
twos = elements.values_list('series__subtopic2_name', 'series__subtopic2_slug').distinct()
threes = elements.values_list('series__subtopic3_name', 'series__subtopic3_slug').distinct()
for num in [ones, twos, threes]:
for name, slug in num:
if name != '':
subtopic_list.append({'name': name, 'slug': slug)}
【问题讨论】:
标签: python django django-queryset