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

时间:2011-04-16 02:15:11

标签: python sorting tuples

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

说我有以下内容:

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

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

sorted = [('suzy','stuff'),('something','othervalues'),('bobby','otherthings') ]

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

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

3 个答案:

答案 0 :(得分:3)

首先从list1创建字典:

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

这会创建name -> number映射。

然后您可以使用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)

值得一读:Sorting Mini-HOW TO

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

这很容易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函数,是变量名称的错误选择。

相关问题