2010-11-10 6 views
0
d = {'id': 'ccccc', 
    'school': [{'s_id': '12', 'city': 'xxx'}, {'s_id': '11', 'city':'yy'}]} 

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

+4

* ответьте, пожалуйста, он использует ключевое слово фильтра. * Это домашнее задание? что вы пробовали? – SilentGhost

+0

Пожалуйста, прочтите 5.1.3 http://docs.python.org/tutorial/datastructures.html – soulseekah

+0

Пожалуйста, следуйте [general] (http://tinyurl.com/so-hints) вопросу [рекомендации] (http: // meta .stackexchange.com/q/10812): укажите любые специальные ограничения, покажите, что вы пробовали до сих пор, и спросите, что конкретно вас путает. – 2010-11-10 17:14:15

ответ

0
>>> s_id=11 
>>> [i for i in d['school'] if i['s_id'] == str(s_id)] 
[{'s_id': '11', 'city': 'yy'}] 
0

Здесь 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']) 
2

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

>>> 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'}