10

这有点棘手,我想不出任何简洁的东西。

我有一个按元组项目排序的元组列表。这些项目可能具有相同的值,因此如下所示:

a = [(a,1), (b,1), (c, 1), (d,2), (e,2), (f,2)]

我正在寻找的是一种在他们自己的集合中随机化所有 1 和 2 的顺序的方法。这是为了替换一点mysql:

ORDER BY num_of_hotdogs DESC, rand()
4

1 回答 1

12

您可以通过由它们自己组成的元组然后是随机数对项目进行排序。如果v_1 < v_2, (v_1, random.random()) < (v_2, random.random()); 如果v_1 == v_2,它将回退到比较随机数。

sorted(a, key=lambda v: (v, random.random()))
于 2012-05-16T20:21:44.730 回答