Добавить даты в хронологическом порядке - PullRequest
0 голосов
/ 05 июня 2018

Это JSON:

[{'can_occur_before': False,
  'categories': [{'id': 8, 'name': 'Airdrop'}],
  'coins': [{'id': 'cashaa', 'name': 'Cashaa', 'symbol': 'CAS'}],
  'created_date': '2018-05-26T03:34:05+01:00',
  'date_event': '2018-06-05T00:00:00+01:00',
  'title': 'Unsold Token Distribution',
  'twitter_account': None,
  'vote_count': 125},
 {'can_occur_before': False,
  'categories': [{'id': 4, 'name': 'Exchange'}],
  'coins': [{'id': 'tron', 'name': 'TRON', 'symbol': 'TRX'}],
  'created_date': '2018-06-04T03:54:59+01:00',
  'date_event': '2018-06-05T00:00:00+01:00',
  'title': 'Indodax Listing',
  'twitter_account': '@PutraDwiJuliyan',
  'vote_count': 75},
 {'can_occur_before': False,
  'categories': [{'id': 5, 'name': 'Conference'}],
  'coins': [{'id': 'modum', 'name': 'Modum', 'symbol': 'MOD'}],
  'created_date': '2018-05-26T03:18:03+01:00',
  'date_event': '2018-06-05T00:00:00+01:00',
  'title': 'SAPPHIRE NOW',
  'twitter_account': None,
  'vote_count': 27},
 {'can_occur_before': False,
  'categories': [{'id': 4, 'name': 'Exchange'}],
  'coins': [{'id': 'apr-coin', 'name': 'APR Coin', 'symbol': 'APR'}],
  'created_date': '2018-05-29T17:45:16+01:00',
  'date_event': '2018-06-05T00:00:00+01:00',
  'title': 'TopBTC Listing',
  'twitter_account': '@cryptoalarm',
  'vote_count': 23}]

Я хочу взять все date_events и добавить их в список в хронологическом порядке.В настоящее время у меня есть этот код, и я не уверен, как заказать их в хронологическом порядке.

date = []
for i in getevents:
    date.append(i['date_event'][:10])

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Простой способ - составить список, а затем применить sort() метод

data = json.load(open('filename.json','r'))
dates = [item['date_event'] for i in data]
dates.sort()

Используя данные вашего примера с полем 'creation_date' (значения 'date_event' одинаковы), мы получим:

['2018-05-26T03:18:03+01:00',
'2018-05-26T03:34:05+01:00',
'2018-05-29T17:45:16+01:00',
'2018-06-04T03:54:59+01:00']
0 голосов
/ 05 июня 2018

Прежде всего, все date_event в вашем массиве объектов одинаковы, поэтому нет особого смысла в их сортировке. Кроме того, ваш подход не продвинет вас далеко, вам нужно преобразовать даты в собственную дату /Объекты времени, чтобы вы могли сортировать их с помощью функции сортировки.

Самый простой способ разобрать правильно отформатированные дату / время - это использовать dateutil.parse.parser, а сортировка существующего списка выполняется с помощью list.sort() - я сделалбыстрый пример того, как использовать эти инструменты, я также изменил значения date_event, чтобы продемонстрировать это: https://repl.it/repls/BogusSpecificRate

После того, как вы декодировали строку JSON (json.loads) и у вас есть список Python для работыс помощью вы можете продолжить сортировку списка:

# Ascending
events.sort(key=lambda e: parser.parse(e['date_event']))
print([":".join([e['title'], e['date_event']]) for e in events])

# Descending
events.sort(key=lambda e: parser.parse(e['date_event']), reverse=True)
print([":".join([e['title'], e['date_event']]) for e in events])
...