Python & Sorting: сортировка элементов по порядку их подэлементов в массиве - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть массив, и он имеет 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']]

Как я могу это сделать? Можете ли вы дать мне решение для этого?

Ответы [ 3 ]

1 голос
/ 11 апреля 2019

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(..) навсегда меняет ваш список. Если это не то, что вы хотите, вы можете создать новый, используя sorted, как предлагает @Rakesh в своемответ.


Престижность: код для сортировки дат был взят из здесь

1 голос
/ 11 апреля 2019

Сортировка списка по строке даты, после изменения его на объект datetime с помощью strptime

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']
#]

1 голос
/ 11 апреля 2019

Преобразовать строковую дату в объект datetime, а затем использовать sorted

Ex:

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']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...