【问题标题】:How to sort tuple in list based on value in other list [duplicate]如何根据其他列表中的值对列表中的元组进行排序[重复]
【发布时间】:2020-11-19 00:53:47
【问题描述】:

我有一个包含元组的列表

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)]

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

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

如何做到这一点?

【问题讨论】:

标签: python list sorting tuples


【解决方案1】:

您可以将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 dict,其中包含第二个列表中各种元素的索引

>>> 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)]

【讨论】:

    【解决方案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']
    

    【讨论】: