使用Python中的列表推导过滤列表列表

时间:2014-09-12 04:19:23

标签: python-2.7 filtering list-comprehension

我有一个列表列表(如下所示),我希望根据每个列表的第一个元素进行过滤。

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

如果有人能帮助我理解我做错了什么,我真的很感激。

2 个答案:

答案 0 :(得分:1)

你想:

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

i是列表中的实际元素,而不是其索引。

答案 1 :(得分:0)

您可以使用内置的filter功能。语法是:

filter(function, sequence)

所以,你的代码看起来像是:

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

P.S。我知道你更喜欢使用列表推导,但我认为过滤器会使代码更具可读性。