2014-10-24 3 views
1

Я пытаюсь найти значение внутри списка, находящегося внутри словаря без ключа , и цель заключается в том, что я не могу добавить одно и то же имя в список Словарь.Как найти значение внутри списка, который находится внутри словаря

Словарь выглядит примерно так:

Dict={'1_number': ['1_name'], '2_number': ['2_name', '3_name']} 

так я пытаюсь проверить, если 3_name существует в словаре.

Также пытается отобразить 2_number путем поиска его с помощью 2_name, отображающего ключ, путем поиска его с одним из его значений.

ответ

4

Вы можете фактически объединить список понимание для перебора значений словаря с any для оценки короткого замыкания для поиска элемента, чтобы получить желаемый результат

>>> any('3_name' in item for item in Dict.values()) 
True 

в качестве альтернативы, если вы заинтересованы возвратите все экземпляры словарей, у которых есть соответствующий элемент, просто убедитесь, что условие проверки элемента в его значении находится в выражении if, а пара значений ключа возвращается как часть фильтра. Понимание списка.

>>> [(k, v) for k, v in Dict.items() if '3_name' in v] 
[('2_number', ['2_name', '3_name'])] 

Наконец, если вы уверены, что есть один и только один элемент, или вы хотели бы вернуть первый хит, использовать генератор с рядом

>>> next((k, v) for k, v in Dict.items() if '3_name' in v) 
('2_number', ['2_name', '3_name']) 
1

Вы можете повторение значений словаря и проверить на pressence разыскиваемого значения списка:

>>> def find_in_dict(d, name): 
>>> for k,vals in d.iteritems(): 
>>>  if name in vals: 
>>>   return k 
>>> else: 
>>>  return False 

>>> find_in_dict(d,'3_name') 
'2_number' 
>>> find_in_dict(d,'4_name') 
False 
0

Вы можете использовать список понимание для поиска значений словаря, а затем возвращать tuple из (key, value), если вы найдете ключ, соответствующий значению, которое вы ищете.

d = {'1_number': ['1_name'], '2_number': ['2_name', '3_name']} 
search = '3_name' 

>>> [(key, value) for key, value in d.items() if search in value] 
[('2_number', ['2_name', '3_name'])] 
Смежные вопросы