Невозможно получить элемент без повторения списка.
Используя выражение генератора и 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", "?")
'?'
* «не проходит весь список» * останавливается, как только вы найдете правильный dict? Конечно, худший случай все равно будет проходить через весь список. –
Как вы можете получить поиск O (1) при поиске по неупорядоченному списку? Насколько мне известно, это невозможно. – ffledgling