0

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

假设我有这样的模型:

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 个,按时间排序的下一个项目,依此类推……每个项目在列表中都需要是唯一的(不能只是将两个列表连接成两倍长的列表)。

我怎样才能实现这样的事情并保持相对高效?

编辑: 一些注意事项:

  1. 结束列表中的项目必须是唯一的,因此我不能只合并两个列表。
  2. 如果我合并列表并随后删除重复项,则排序顺序将被破坏(例如,相同顺序的 2 个相邻值)。
4

1 回答 1

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 ]
于 2013-04-05T20:37:36.723 回答