我有一个包含元组的列表
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']
该怎么做?
答案 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']