2011-04-16 205 views
3

我想根據另一個元組列表對列表中的鍵進行排序。基於元組列表對元組列表進行排序 - Python

說我有以下幾點:

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

而從這個我會收到列表1中的每個元組的第一個元素在輸出soring。

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

因此,本質上它執行一個交集,然後通過list1的元組中的第一個元素對剩餘值進行排序。

我不知道該怎麼做,所以任何幫助都會很棒。

回答

3

只是做描述說什麼,不大不小的通過在該列表中的一個關鍵基礎元組的另一份名單上的元組的列表:

rank = {key:rank for rank, key in list1} 
print(sorted(list2, key=lambda t: rank.get(t[0]), reverse=True)) 
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

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功能和變量名一個不錯的選擇。

相關問題