Сортировка по дате и номеру

#python #python-3.x #sorting

Вопрос:

Как бы я мог отсортировать кучу данных в формате — например, BTC-DMMMYY-00000-K:

«instrument_name»:»БТЦ-31DEC21-20000-П»
«instrument_name»:»БТЦ-24SEP21-15000-с»
«instrument_name»:»БТЦ-16JUL21-40000-с»
«instrument_name»:»БТЦ-30JUL21-40000-с»
«instrument_name»:»БТЦ-16JUL21-25000-с»
«instrument_name»:»БТЦ-16JUL21-32000-П»
«instrument_name»:»БТЦ-24SEP21-13000-П»
«instrument_name»:»БТЦ-14JUL21-37000-с»
«instrument_name»:»БТЦ-23JUL21-40000-с»
«instrument_name»:»БТЦ-14JUL21-38000-с»
«instrument_name»:»БТЦ-24SEP21-10000-ц»
«instrument_name»:»БТЦ-31DEC21-44000-с»
«instrument_name»:»БТЦ-24SEP21-10000-П»
«instrument_name»:»БТЦ-24SEP21-12000-П»
«instrument_name»:»БТЦ-14JUL21-33000-П»

мне нужно, чтобы это было отсортировано так, чтобы даты были в порядке, а также цифры рядом с ним (зачеркивает) какие-либо идеи?

Комментарии:

1. Пожалуйста, опубликуйте образец данных в виде текста, а не в виде изображения. Пожалуйста, объясните, почему звонки sorted() с надлежащими аргументами не работают для вас.

2. Разбор на маркеры с использованием str.split или re , преобразование части даты в datetime объект, преобразование части числа в int , а затем сортировка на основе этих компонентов. Если вы проявите честную попытку сделать это, мы сможем помочь вам в реализации.

3. проверьте sorted() и datetime.datetime.strptime() . Попробуйте найти решение, и люди присоединятся, чтобы помочь.

4. Вы хотите, чтобы он был отсортирован по возрастанию или по убыванию?

Ответ №1:

Если вы хотите, чтобы данные были отсортированы по возрастанию, и у вас есть список, такой как l

 l = ["BTC-31DEC21-20000-P", "BTC-24SEP21-15000-C", "BTC-16JUL21-40000-C", "BTC-30JUL21-40000-C", 
"BTC-16JUL21-25000-C", "BTC-16JUL21-32000-P", "BTC-24SEP21-13000-P", "BTC-14JUL21-37000-C",
"BTC-23JUL21-40000-C","BTC-14JUL21-38000-C", "BTC-24SEP21-10000-C", "BTC-31DEC21-44000-C",
"BTC-24SEP21-10000-P", "BTC-24SEP21-12000-P", "BTC-14JUL21-33000-P"]  
 

Затем:

 from datetime import datetime
sorted(l, key= lambda x: (datetime.strptime(x[4:11],'%d%b%y'), x[12:17]))  
 

это даст:

 ['BTC-14JUL21-33000-P',
 'BTC-14JUL21-37000-C',
 'BTC-14JUL21-38000-C',
 'BTC-16JUL21-25000-C',
 'BTC-16JUL21-32000-P',
 'BTC-16JUL21-40000-C',
 'BTC-23JUL21-40000-C',
 'BTC-30JUL21-40000-C',
 'BTC-24SEP21-10000-C',
 'BTC-24SEP21-10000-P',
 'BTC-24SEP21-12000-P',
 'BTC-24SEP21-13000-P',
 'BTC-24SEP21-15000-C',
 'BTC-31DEC21-20000-P',
 'BTC-31DEC21-44000-C']