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