[英]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
在最前面。 它將在按True
和False
排序后保持子列表的順序。 所以那些具有相同真值的子列表將保持它們所在的順序。
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.