Как отфильтровать элемент списка в Python на основе другого списка?

#python #dictionary

Вопрос:

У меня есть список словарей, и я хотел бы разделить словари на основе значения ключа "timestamp" . Идея состоит в том, чтобы сгруппировать словари 1-го семестра (с января по июль) и словари 2-го семестра (с августа по декабрь). Как я могу сделать это эффективным с точки зрения производительности способом?

Это мой код:

 group1 = ['2020-01', '2020-02', '2020-03', '2020-04', '2020-05', '2020-06']

data = [
    {
        'timestamp': '2020-01-01T00:00:00Z',
        'price': 7204.54,
        'volume_24h': 13086960135,
        'market_cap': 130644686531},
    {
        'timestamp': '2020-01-01T01:00:00Z',
        'price': 7218.55,
        'volume_24h': 13133228186,
        'market_cap': 130899528700},
    {
        'timestamp': '2020-01-01T02:00:00Z',
        'price': 7241.8,
        'volume_24h': 13257849556,
        'market_cap': 131321418482
    }
]

semester_1 = [i for i in data if group1 in i['timestamp']]
 

К сожалению, он выдает ошибку, потому group1 что это список.

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

1. пробовать i['timestamp'] in group1

2. Конечно, вам придется выбрать правильную часть строки

Ответ №1:

Вы можете попытаться проверить, находится ли подстрока метки времени, включающая эту дату, в группе списка 1:

 group1 = [f'2020-0{i}' for i in range(1,7)]

data = [{'timestamp': '2020-01-01T00:00:00Z',
  'price': 7204.54,
  'volume_24h': 13086960135,
  'market_cap': 130644686531},
 {'timestamp': '2020-01-01T01:00:00Z',
  'price': 7218.55,
  'volume_24h': 13133228186,
  'market_cap': 130899528700},
 {'timestamp': '2020-01-01T02:00:00Z',
  'price': 7241.8,
  'volume_24h': 13257849556,
  'market_cap': 131321418482}]

semester_1 = [item for item in data if item['timestamp'][:7] in group1]
 

Ответ №2:

Попробуй:

 semester_1 = [i for i in data if i['timestamp'][0:7] in group1]
 

Или даже без определения group1 :

 semester_1 = [i for i in data if int(i['timestamp'][5:7]) < 7]