如何根据另一个列表对元组列表进行排序

Posted

技术标签:

【中文标题】如何根据另一个列表对元组列表进行排序【英文标题】:how to sort a list of tuples based on another list 【发布时间】:2022-01-18 09:03:59 【问题描述】:
X = ["v", "g", "r", "a", "f"]
Y = [("v", 7), ("f", 3), ("r", 3), ("g", 7), ("a", 2)]

我想先根据数字升序对列表Y进行排序,然后根据X中的字母对排序后的Y进行排序

我正在寻找的答案是: [('a', 2), ('r', 3), ('f', 3), ('v', 7), ('g', 7)]

    按升序排列数字。 'r' 和 'f' 的个数是 3,我想根据 X 对它们进行排序,先 r 再 f。

【问题讨论】:

【参考方案1】:

您可以使用sorted 函数,如下所示。

sorted(Y, key=lambda a: (a[1], X.index(a[0])))

键的顺序是(基于Y的数字,基于X的字符)。

【讨论】:

【参考方案2】:

仅使用列表推导:

Y = [(x, y) for x, y, _ in sorted([(x, y, X.index(x)) for x, y in Y], key=lambda x: x[1:])]

在内部理解中,Y 中的每个元素都有第三个数字 - x 中的索引。然后你对这两个 indeces 进行排序,然后使用外部推导返回到原始形式。

【讨论】:

以上是关于如何根据另一个列表对元组列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章

根据元组的值,以不同的顺序对元组列表进行排序。

根据第三个参数对元组列表进行排序[重复]

如何按两个元素对元组列表进行排序?

如何根据某些文本标准对元组列表进行分组/存储?

按元组的第二个元素对元组列表进行排序,无需高阶函数或递归

按第二项(整数值)对元组列表进行排序[重复]