簡體   English   中英

根據子列表是否具有指定字符串,對帶有子列表的列表進行排序

[英]Sorting a list with sublists, based on whether the sublist has a designated string

我想以具有特定字符串(我選擇的)的元素(子列表)排在第一位的方式對列表進行排序。 我想用 Python 的sort()方法中的key參數來做到這一點。

例如,如果我有

輸入

l1 = [["hello", 1, 65, 331],["goodbye", 653, 43, 9], ["example", 22, 123, 92]]

我想使用l1.sort()對列表進行排序,以“example”作為參數,對列表進行排序,如下所示:

輸出

[["example", 22, 123, 92], ["hello", 1, 65, 331], ["goodbye", 653, 43, 9]]

這可能嗎?

說你想先說goodbye ,你可以這樣做:

l1 = [["hello", 1, 65, 331],["goodbye", 653, 43, 9], ["example", 22, 123, 92]]

s = 'goodbye'
sorted(l1, key=lambda x: x[0]!=s)
# [['goodbye', 653, 43, 9], ['hello', 1, 65, 331], ['example', 22, 123, 92]]

有關上述工作原理的詳細說明,請查看其他答案

您可以使用 lambda 表達式來檢查關鍵字是否在子列表中,這將為每個表達式返回一個布爾真值,其中False將在True之前排序,因此我們也應用 reverse 以便那些True在最前面。 它將在按TrueFalse排序后保持子列表的順序。 所以那些具有相同真值的子列表將保持它們所在的順序。

l1 = [["hello", 1, 65, 331],["goodbye", 653, 43, 9], ["example", 22, 123, 92]]
keyword = "example"
print(l1)
l1.sort(key=lambda sublist: keyword in sublist, reverse=True)
print(l1)

輸出

[['hello', 1, 65, 331], ['goodbye', 653, 43, 9], ['example', 22, 123, 92]]
[['example', 22, 123, 92], ['hello', 1, 65, 331], ['goodbye', 653, 43, 9]]

這是代碼。 請原諒我把它放這么長,但它達到了目的:)

import operator
def sortfunction(parameter,list):
    tmplist1 = []
    tmplist2 = []
    for elem in list:
        if elem[0] == parameter:
            tmplist1 = elem
        else:
            tmplist2.append(elem)
    sorted_temp = sorted(tmplist2, key=operator.itemgetter(1),reverse=True)
    final_list = tmplist1 + sorted_temp
    return final_list

#Call the function:
sortfunction("example",l1)

輸出:

['example', 22, 123, 92, ['goodbye', 653, 43, 9], ['hello', 1, 65, 331]]

暫無
暫無

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

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