簡體   English   中英

基於元組列表排序元組列表 - Python

[英]Sorting Lists of tuples based on a list of tuples - Python

我試圖通過該列表中的鍵來基於另一個元組列表對元組列表進行排序。

說我有以下內容:

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元組中的第一個元素對剩余值進行排序。

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

首先從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)

值得一讀: 排序迷你如何

只需執行描述所說的內容,按照該列表中的鍵,根據另一個元組列表對元組列表進行排序:

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

注意: sorted是一個內置的Python函數,是變量名的錯誤選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM