data['objects']
给了我这个:
[{u'id': 8299, u'title': u'Blablablabla text',
u'url': u'http://www.youtube.com/watch?v=EuPBjf3jq_M', u'video_id': u'EuPBjf3jq_M',
u'slug': u'my-slug', u'thumbnail': u'/media/CACHE/images/bilder/2014/09/12/133107_VMi5c/656141a37cc52e347c14e4837d39c1e3.jpg'},
{...},{...}, ..]
上面有很多字典。我需要使用python找到具有slug my-slug
的那个。
如何搜索并获取包含此slug的整个字典?
答案 0 :(得分:2)
您可以使用filter
:
>>> data = [{u'id': 8299, u'title': u'Blablablabla text',
u'url': u'http://www.youtube.com/watch?v=EuPBjf3jq_M', u'video_id': u'EuPBjf3jq_M',
u'slug': u'my-slug', u'thumbnail': u'/media/CACHE/images/bilder/2014/09/12/133107_VMi5c/656141a37cc52e347c14e4837d39c1e3.jpg'},
{'slug': 'no'}, {'title': 'just_title'}]
>>> filter(lambda x: x.get('slug') == 'my-slug', data)
[{u'title': u'Blablablabla text', u'url': u'http://www.youtube.com/watch?v=EuPBjf3jq_M', u'video_id': u'EuPBjf3jq_M', u'slug': u'my-slug', u'id': 8299, u'thumbnail': u'/media/CACHE/images/bilder/2014/09/12/133107_VMi5c/656141a37cc52e347c14e4837d39c1e3.jpg'}]
此外,如果您的数据集很大,最好使用ifilter
,因为它不会创建新列表,但生成器:
>>> from itertools import ifilter
>>> filtered_generator = ifilter(lambda x: x.get('slug') == 'my-slug', data)
>>>
>>> filtered_generator
<itertools.ifilter object at 0x7f0830be7fd0>
>>>
>>> for d in filtered_generator:
... print d['slug']
...
my-slug
答案 1 :(得分:1)
也许这样?
>>> objs = [{'slug': 'my-slug', ...},{'slug': 'xxx', ...}, ...]
>>> (filter(lambda o: o['slug'] == 'my-slug', objs) or [None])[0]
{'slug': 'my-slug'}
答案 2 :(得分:1)
制作具有该slug的对象列表:
right_slug = [obj for obj in data['objects'] if obj['slug'] == 'my-slug']
if len(right_slug) == 1:
the_object = right_slug[0]
else:
# Oh no, the slug occurred either 0 or more than 1 times!
# do something here
pass