如何基于其他列表中的值对列表中的元组进行排序

时间:2020-07-29 12:21:52

标签: python list sorting tuples

我有一个包含元组的列表

a = [('TV-MA', 1348), ('TV-14', 1038), ('R', 506), ('TV-PG', 432), ('PG-13', 286), ('NR', 202), ('PG', 183), ('TV-G', 80), ('TV-Y7', 69), ('TV-Y', 41)]

我想根据另一个列表中的值对它进行排序

b = ['TV-MA', 'TV-14', 'TV-PG', 'R', 'PG-13', 'NR', 'PG', 'TV-Y7', 'TV-G', 'TV-Y']

该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以将sorted与返回第二个列表中元素索引的键一起使用

>>> sorted(a, key=lambda x: b.index(x[0]))
[('TV-MA', 1348), ('TV-14', 1038), ('TV-PG', 432), ('R', 506), ('PG-13', 286), ('NR', 202), ('PG', 183), ('TV-Y7', 69), ('TV-G', 80), ('TV-Y', 41)]

要加快索引查找速度,您可以创建一个tmp字典,其中包含第二个列表中各个元素的索引。

>>> d = dict(zip(b, range(len(b))))
>>> sorted(a, key=lambda x: d[x[0]])
[('TV-MA', 1348), ('TV-14', 1038), ('TV-PG', 432), ('R', 506), ('PG-13', 286), ('NR', 202), ('PG', 183), ('TV-Y7', 69), ('TV-G', 80), ('TV-Y', 41)]

答案 1 :(得分:2)

使用此-

b = sorted(a, key=lambda x:x[1], reverse=True)
b
[('TV-MA', 1348),
 ('TV-14', 1038),
 ('R', 506),
 ('TV-PG', 432),
 ('PG-13', 286),
 ('NR', 202),
 ('PG', 183),
 ('TV-G', 80),
 ('TV-Y7', 69),
 ('TV-Y', 41)]

如果只需要第一个元素,则-

b = [i[0] for i in b]
b
['TV-MA', 'TV-14', 'R', 'TV-PG', 'PG-13', 'NR', 'PG', 'TV-G', 'TV-Y7', 'TV-Y']

一行-

b = [i[0] for i in sorted(a, key=lambda x:x[1], reverse=True)]
b
['TV-MA', 'TV-14', 'R', 'TV-PG', 'PG-13', 'NR', 'PG', 'TV-G', 'TV-Y7', 'TV-Y']