簡體   English   中英

Python根據另一個列表排序一個列表

[英]Python Sort One List According to Another List

我有兩個列表,第一個列表是鍵順序,第二個列表是元組列表。

colorOrder = ['red', 'blue', 'yellow', 'green']
tupleList = [(111,'red'),(222,'pink'),(333,'green')]

請注意這兩個列表不是一對一的關系。 有些顏色不是colorOrder ,對於某些顏色colorOrder不會出現在tupleList 所以它與其他類似的重復問題不同。

我需要根據colorOrder對tupleList進行排序。

我可以使用兩個嵌套for循環來解決這個問題,但需要一個更有效的解決方案。

#First sort according to the color order
    for aColor in colorOrder:
        for aTuple in tupleList:
            if aTuple[1] == aColor:
                ResultList.append(aTuple)
#Second add the tuples to the ResultList, whose color is not in the colorOrder
    for aTuple in tupleList:
        if aTuple[1] not in colorOrder:
            ResultList.append(aTuple)

首先,我將colorOrder映射:

colorMap = {c: i for i, c in enumerate(colorOrder)}

現在使用colorMap.get更輕松地進行排序

sorted(tupleList, key=lambda tup: colorMap.get(tup[1], -1))

首先將事情不是在地圖上。 如果您最后添加它們,只需使用一個非常大的數字:

sorted(tupleList, key=lambda tup: colorMap.get(tup[1], float('inf')))

檢查此解決方案:

     xx = dict([(x[1],x[0]) for x in enumerate(colorOrder)])
     [x[1] for x in sorted([(xx.get(y[1],999),y) for y in tupleList])]

暫無
暫無

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

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