2014-12-02 2 views
-1
mydict = {'a': {'name': 'Marco', 'gender': 'm', 'age': 38, 'info': 'teacher musician'} 
      'b': {'name': 'Daniela', 'gender': 'f', 'age': 28, 'info': 'student music'} 
      'c': {'name': 'Maria', 'gender': 'f', 'age': 25, 'info': 'doctor dance whatever'}} 

Как выбрать записи с возрастом ниже 30 и со словами, включая «музыку» в «информации»? Результаты должны быть как:Как выбрать под-словарь с условием

newdict = {'b': {'name': 'Daniela', 'gender': 'f', 'age': 28, 'info': 'student music'}} 

ответ

1

Простейший способ заключается в использовании Dict-Комп:

mydict = {'a': {'name': 'Marco', 'gender': 'm', 'age': 38, 'info': 'teacher musician'}, 
      'b': {'name': 'Daniela', 'gender': 'f', 'age': 28, 'info': 'student music'}, 
      'c': {'name': 'Maria', 'gender': 'f', 'age': 25, 'info': 'doctor dance whatever'}} 

new_dict = {k:v for k,v in mydict.iteritems() if v['age'] < 30 and 'music' in v['info'].split()} 
# {'b': {'info': 'student music', 'gender': 'f', 'age': 28, 'name': 'Daniela'}} 
+0

@Franco это сокращает * понимание словаря * - он строит словарь из другого итерабельного с необязательным предложением 'if' - в котором вы помещаете любые дополнительные условия, которые вы хотите применить –

0

Вы можете использовать следующее понимание:

>>> {d:k for d,k in mydict.items() if k['age']<30 and 'music' in k['info']} 
{'b': {'info': 'student music', 'gender': 'f', 'age': 28, 'name': 'Daniela'}} 

mydict.items() дать вам кортеж содержат ключевое значение словаря в каждом цикле, и вы можете выбрать элемент, который имеет соответствующие условия!

Смежные вопросы