基于元组列表对元组列表排序Python

2024-09-29 04:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据另一个元组列表中的键对一个元组列表进行排序。在

假设我有以下内容:

list1 = [(5, 'something'),(2,'bobby'),(9,'suzy'),(6,'crab')]
list2 = [('something','othervalues'),('suzy','stuff'),('bobby','otherthings')]

从这里,我将收到对list1中每个元组的第一个元素的输出排序。在

^{pr2}$

所以本质上它执行一个交集,然后根据list1元组中的第一个元素对剩余的值进行排序。在

我不知道该怎么做,所以任何帮助都会很好。在


Tags: 元素列表排序something元组stufflist2crab
3条回答

如果list2a^{},这很简单,如下所示:

{'bobby': 'otherthings', 'something': 'othervalues', 'suzy': 'stuff'}

Python将为您进行转换:

^{pr2}$

然后可以使用^{}

>>> [(k,dict2[k]) for _,k in sorted(list1, reverse=True) if k in dict2]
[('suzy', 'stuff'), ('something', 'othervalues'), ('bobby', 'otherthings')]

N.B:^{}是一个内置的Python函数,对于变量名来说是个错误的选择。在

首先从list1创建字典:

>>> order = dict(reversed(t) for t in list1)

这将创建一个name -> number映射。在

然后可以使用sorted方法(不要这样命名变量)和lambda表达式作为key

^{pr2}$

或者,如果您想就地排序:

>>> list2.sort(key=lambda x: order[x[0]], reverse=True)

值得一读:Sorting Mini-HOW TO

按照描述的内容,根据另一个元组列表中的键对元组列表进行排序:

rank = {key:rank for rank, key in list1}
print(sorted(list2, key=lambda t: rank.get(t[0]), reverse=True))

相关问题 更多 >