交替排序列

时间:2013-04-05 20:22:21

标签: python django sorting django-orm

遇到一个奇怪的要求......

假设我有这样的模型:

class MyModel(models.Model):
    priority = models.IntegerField()
    time = models.DateTimeField()

假设我们有:

by_time = MyModel.objects.order_by('time')
by_prio = MyModel.objects.order_by('priority')

我需要使用交替排序顺序显示项目。例如。 1个项目按时间排序,1个按优先级排序,下一个按时间排序等等...每个项目在列表中都必须是唯一的(不能将两个列表加入两个更长的列表中)。 / p>

我如何实现这样的事情并保持相对高效?

编辑: 几点说明:

  1. 结尾列表中的项目必须是唯一,因此我无法合并这两个列表。
  2. 如果我合并列表并在之后删除重复项,则排序顺序将被破坏(例如,相同顺序的2个相邻值)。

1 个答案:

答案 0 :(得分:1)

您可以通过这种方式组合这两个列表:

>>> result = [None]*(len(by_time)+len(by_prio))
>>> result[::2] = by_time
>>> result[1::2] = by_prio
>>> result = [result.pop(i) for i in range(len(result))[::-1] if result.count(result[i]) > 1 ]