Фильтровать конкретный словарь - PullRequest
0 голосов
/ 10 ноября 2010
d = {'id': 'ccccc',
     'school': [{'s_id': '12', 'city': 'xxx'}, {'s_id': '11', 'city':'yy'}]}

Я хочу отфильтровать его с помощью s_id.Предположим, что если кто-то хочет отфильтровать s_id = 11, он должен вернуть {'s_id': '11', 'city':'yy'}. Пожалуйста, ответьте, используя ключевое слово filter.

Ответы [ 3 ]

2 голосов
/ 10 ноября 2010

Просто используйте встроенную функцию фильтра Python:

>>> filter(lambda d:d['s_id']=='11',d['school'])
[{'s_id': '11', 'city': 'yy'}]

в качестве бонуса, если вы хотите отсортировать по 's_id', вы можете сделать:

>>> for school in sorted(d['school'],key=lambda d:d['s_id']):
...     print school
... 
{'s_id': '11', 'city': 'yy'}
{'s_id': '12', 'city': 'xxx'}
0 голосов
/ 10 ноября 2010

Здесь используется filter и частичные функции.

#!/usr/bin/env python

from functools import partial

d = {'id': 'ccccc','school': [{'s_id': '12', 'city': 'xxx'}, {'s_id': '11',
'city':'yy'}]}

def myfilter(school, s_id):
    return school['s_id'] == str(s_id)

f = partial(myfilter, s_id = 11)
print filter(f, d['school'])
0 голосов
/ 10 ноября 2010
>>> s_id=11
>>> [i for i in d['school'] if i['s_id'] == str(s_id)]
[{'s_id': '11', 'city': 'yy'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...