2014-09-12 2 views
0

У меня есть список списков (показано ниже), которые я бы хотел отфильтровать на основе первого элемента каждого списка.Отфильтровать список списков, используя понимание списков в Python

raw_json = [[u'2014-09-09', u'18:00:00', 81, 1, u'codereview.stackexchange.com', u'Engineering & Technology', 1], [u'2014-09-09', u'18:00:00', 79, 1, u'google.com', u'Search', 0], [u'2014-09-11', u'23:00:00', 44, 1, u'newtab', u'Browsers', 0], [u'2014-09-11', u'23:00:00', 44, 1, u'iTunes', u'Music', -2], [u'2014-09-11', u'23:00:00', 24, 1, u'google.com', u'Search', 0], [u'2014-09-11', u'23:00:00', 22, 1, u'effbot.org', u'Search', 0], [u'2014-09-11', u'23:00:00', 3, 1, u'spotify', u'General Entertainment', -2], [u'2014-09-11', u'23:00:00', 2, 1, u'calendar.boston.com', u'Regional', -2]] 

Короче говоря, я хотел бы иметь возможность фильтровать по дате сегодняшних, так в идеале я бы вернулся ко мне, что выглядит следующим образом:

result = [[u'2014-09-11', u'23:00:00', 44, 1, u'newtab', u'Browsers', 0], [u'2014-09-11', u'23:00:00', 44, 1, u'iTunes', u'Music', -2], [u'2014-09-11', u'23:00:00', 24, 1, u'google.com', u'Search', 0], [u'2014-09-11', u'23:00:00', 22, 1, u'effbot.org', u'Search', 0], [u'2014-09-11', u'23:00:00', 3, 1, u'spotify', u'General Entertainment', -2], [u'2014-09-11', u'23:00:00', 2, 1, u'calendar.boston.com', u'Regional', -2]] 

Я написал следующий код, но продолжаю получать сообщение об ошибке сказав TypeError: list indices must be integers, not list

today = date.today().isoformat() 
today_raw_json = [i for i in raw_json if today==raw_json[i][0]] 
print today_raw_json 

Если кто-то может помочь мне понять, что я делаю неправильно, я бы очень признателен.

+0

Зацикливание по списку петель над элементами, а не индексы. – user2357112

ответ

1

Вы хотите:

[i for i in raw_json if i[0] == today] 

i фактический элемент в списке, а не его индекс.

+0

Получил это. Поэтому 'i' возвращал мне отдельные списки в моем большом списке' raw_json', который учитывал ошибки, которые я получал. Спасибо за помощь. –

0

Вы можете использовать встроенную функцию filter. Синтаксис:

filter(function, sequence) 

Итак, ваш код будет выглядеть следующим образом:

filter(lambda x:x[0] == today, raw_json) 

P.S. Я знаю, что вы предпочтете использовать списки, но я думаю, что фильтр сделает код более читаемым.

Смежные вопросы