根据元组列表对元组列表进行排序-Python

|| 我正在尝试根据另一个元组列表通过该列表中的键对元组列表进行排序。 说我有以下几点:
list1 = [(5, \'something\'),(2,\'bobby\'),(9,\'suzy\'),(6,\'crab\')]
list2 = [(\'something\',\'othervalues\'),(\'suzy\',\'stuff\'),(\'bobby\',\'otherthings\')]
然后,我将在list1中每个元组的第一个元素上收到输出soring。
sorted = [(\'suzy\',\'stuff\'),(\'something\',\'othervalues\'),(\'bobby\',\'otherthings\') ]
因此,基本上,它执行交集,然后按list1元组中的第一个元素对剩余值进行排序。 我不确定该如何处理,因此任何帮助都将非常有用。     
已邀请:
只需按照描述中的内容进行操作,就可以通过另一个元组列表中的键对元组列表进行排序:
rank = {key:rank for rank, key in list1}
print(sorted(list2, key=lambda t: rank.get(t[0]), reverse=True))
    
首先从
list1
创建字典:
>>> order = dict(reversed(t) for t in list1)
这将创建一个“ 5”映射。 然后,您可以使用
sorted
方法(不要这样命名变量)和
lambda
表达式作为
key
>>> sorted(list2, key=lambda x: order[x[0]], reverse=True)
[(\'suzy\', \'stuff\'), (\'something\', \'othervalues\'), (\'bobby\', \'otherthings\')]
或者,如果您想就地排序:
>>> list2.sort(key=lambda x: order[x[0]], reverse=True)
值得一读:排序方式     
如果是
list2
dict
,这会很容易,例如:
{\'bobby\': \'otherthings\', \'something\': \'othervalues\', \'suzy\': \'stuff\'}
Python将为您完成转换:
>>> dict2 = dict(list2)
然后您可以使用
list comprehension
>>> [(k,dict2[k]) for _,k in sorted(list1, reverse=True) if k in dict2]
[(\'suzy\', \'stuff\'), (\'something\', \'othervalues\'), (\'bobby\', \'otherthings\')]
N.B:
sorted
是内置的Python函数,并且是变量名的错误选择。     

要回复问题请先登录注册