如何根据另一个列表对元组列表进行排序
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 进行排序,然后使用外部推导返回到原始形式。
【讨论】:
以上是关于如何根据另一个列表对元组列表进行排序的主要内容,如果未能解决你的问题,请参考以下文章