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

Je veux le filtrer en utilisant s_id. Supposons que si quelqu'un veut filtrer le s_id = 11 il devrait retourner {'s_id': '11', 'city':'yy'}. S'il vous plaît répondre en utilisant le mot clé de filtre.Filtrer le dictionnaire particulier

+4

* S'il vous plaît répondre en utilisant le mot-clé filter. * est-ce un devoir? qu'avez-vous essayé? – SilentGhost

+0

S'il vous plaît lire 5.1.3 http://docs.python.org/tutorial/datastructures.html – soulseekah

+0

Veuillez suivre [général] (http://tinyurl.com/so-hints) question [directives] (http: // meta .stackexchange.com/q/10812): indiquez toutes les restrictions spéciales, montrez ce que vous avez essayé jusqu'à présent, et posez des questions sur ce qui vous dérange plus particulièrement. –

Répondre

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

Ici, on utilise filter et des fonctions partielles.

#!/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

Il suffit d'utiliser python intégré fonction de filtre:

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

comme un bonus, si vous voulez trier 'S_ID' vous pouvez faire:

>>> for school in sorted(d['school'],key=lambda d:d['s_id']): 
...  print school 
... 
{'s_id': '11', 'city': 'yy'} 
{'s_id': '12', 'city': 'xxx'} 
Questions connexes