2013-11-30 4 views
0

У меня есть список словарей на python. Как я могу получить конкретный словарь на основе ключа?Найти словарь на основе ключа в списке словарей в python

Пример ввода:

dict_input = [{"name":"kishore", "age":23}, {"name":"xyz", "age":21}] 

Теперь, как я могу получить словарь, имеющий имя ключа и значение Кишор не проходит через весь список

Я Ожидая O (1) смотреть вверх.

+0

* «не проходит весь список» * останавливается, как только вы найдете правильный dict? Конечно, худший случай все равно будет проходить через весь список. –

+0

Как вы можете получить поиск O (1) при поиске по неупорядоченному списку? Насколько мне известно, это невозможно. – ffledgling

ответ

1

Невозможно получить элемент без повторения списка.

Используя выражение генератора и next:

>>> dict_input = [{"name":"kishore", "age":23},{"name":"xyz", "age":21}] 
>>> next((d for d in dict_input if d['name'] == 'kishore'), None) 
{'age': 23, 'name': 'kishore'} 

>>> next((d for d in dict_input if d['name'] == 'no-such-name'), None) 
>>> next((d for d in dict_input if d['name'] == 'no-such-name'), None) == None 
True 

построить словарь, если поиск нужен сделать несколько раз, и вы не хотите итерацию целых элементов списка.

>>> dict_input = { 
...  "kishore": {"name":"kishore", "age":23}, 
...  "xyz": {"name":"xyz", "age":21} 
... } 
>>> dict_input["kishore"] 
{'age': 23, 'name': 'kishore'} 


>>> dict_input["no-such-name"] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'no-such-name' 
>>> dict_input.get("no-such-name", "?") 
'?' 
+1

Чтобы этот ответ был действительно полезным, вы также должны его объяснить. –

+0

Благодарим вас за идею создания dict. Я получил то, что требовал от вашего заявления – kishore

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