我有一个列表列表(如下所示),我希望根据每个列表的第一个元素进行过滤。
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 :(得分: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。我知道你更喜欢使用列表推导,但我认为过滤器会使代码更具可读性。