簡體   English   中英

Python和排序:按數組中子元素的順序對元素進行排序

[英]Python & Sorting : Sorting Elements In Order Their Subelements in an Array

我有一個數組,它有4個元素,每個元素都有3個子元素;

myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]

如您所見,每個元素的第一個子元素都是一個日期。 我想訂購這些元素及其日期。 所以當我輸入print(myList)時,我想要那個輸出;

[['26.03.2019', 'Michelle', '8'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8'], ['03.04.2019', 'Jack', '2']]

我怎樣才能做到這一點? 你能給我一個解決方案嗎?

將字符串date轉換為datetime對象,然后使用sorted

例如:

import datetime
myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]

print( sorted(myList, key=lambda x: datetime.datetime.strptime(x[0], "%d.%m.%Y")) )

輸出:

[['26.03.2019', 'Michelle', '8'],
 ['01.04.2019', 'George', '2'],
 ['02.04.2019', 'Micheal', '8'],
 ['03.04.2019', 'Jack', '2']]

print(myList)只會打印您的列表 您不想擺弄。 您要做的是在打印之前對列表進行排序 例如,例如:

import datetime


myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]
myList.sort(key=lambda sublist: datetime.datetime.strptime(sublist[0], "%d.%m.%Y"))

print(myList)  # -> [['26.03.2019', 'Michelle', '8'], 
               #     ['01.04.2019', 'George', '2'], 
               #     ['02.04.2019', 'Micheal', '8'], 
               #     ['03.04.2019', 'Jack', '2']]

請注意,執行myList.sort(..)永久更改您的列表。如果這不是您想要的,則可以使用@Rakesh在其答案中建議的sorted方式創建一個新列表。


榮譽:日期排序的代碼是從這里獲取的

通過strptime將其更改為datetime對象后,在日期字符串上對列表進行排序

import datetime
myList = [['26.03.2019', 'Michelle', '8'], ['03.04.2019', 'Jack', '2'], ['01.04.2019', 'George', '2'], ['02.04.2019', 'Micheal', '8']]

myList.sort(key=lambda x: datetime.datetime.strptime(x[0], "%d.%m.%Y"))
print(myList)
#[
#['26.03.2019', 'Michelle', '8'], 
#['01.04.2019', 'George', '2'], 
#['02.04.2019', #'Micheal', '8'], 
#['03.04.2019', 'Jack', '2']
#]

暫無
暫無

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

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