У меня есть список словарей с именем tickets
и один словарь с именем issue
. Как найти словарь в tickets
такой, что tickets[i]['summary'] == issue['title']
?Найти словарь в списке словарей
ответ
Вы можете использовать список понимание, как этот
print [ticket for ticket in tickets if ticket['summary'] == issue['title']]
или вы можете использовать filter
как это
print filter(lambda ticket: ticket["summary"] == issue["title"], tickets)
Timeit Результаты говорят о том, что список постижение быстрее фильтра и генератора методов
tickets = [{"summary" : "a"}, {"summary" : "a"}, {"summary" : "b"}]
issue = {"title" : "a"}
from timeit import timeit
print timeit("[ticket for ticket in tickets if ticket['summary'] == issue['title']]", setup="from __main__ import tickets, issue")
print timeit('filter(lambda ticket: ticket["summary"] == issue["title"], tickets)', setup="from __main__ import tickets, issue")
print timeit("list(ticket for ticket in tickets if ticket['summary'] == issue['title'])", setup="from __main__ import tickets, issue")
На моей машине я получил
0.347553014755
0.691710948944
1.10066413879
Даже если цель состоит в том, чтобы получить только один элемент, который соответствует
tickets = [{"summary" : "a"}, {"summary" : "a"}, {"summary" : "b"}]
issue = {"title" : "a"}
setupString = "from __main__ import tickets, issue"
from timeit import timeit
print timeit("[ticket for ticket in tickets if ticket['summary'] == issue['title']][0]", setup=setupString)
print timeit('filter(lambda ticket: ticket["summary"] == issue["title"], tickets)[0]', setup=setupString)
print timeit("next(ticket for ticket in tickets if ticket['summary'] == issue['title'])", setup=setupString)
выход на моей машине
0.369271993637
0.717815876007
0.557427883148
Ваш комментарий об относительной скорости неправильный. Тестовые списки с более чем тремя элементами. – Blender
длинный путь, но это будет искать через весь список:
for i in tickets:
if i['summary'] == issue['title']:
print('Found it!')
else:
print('Does not exist')
Вы можете сделать это в функции, whi ч будет вернется после словарю найдено:
def search(k, n):
for i in k:
if i['summary'] == n['title']:
return i
results = search(tickets, issue)
if not results:
print('No matching ticket found')
Или, как это было предложено @Blender - использовать генератор:
result = next(t for t in tickets if t['summary'] == issue['title'])
Кроме того, функциональный вариант:
filter (lambda dict: dict['summary'] == issue['title'], tickets)
вернется все словари с условием.
- 1. преобразовать словарь словарей словарей в словарь словарей
- 2. Найти словарь на основе ключа в списке словарей в python
- 3. Как удалить повторяющийся словарь в списке словарей?
- 4. Проверьте, есть ли словарь в списке словарей?
- 5. Сортировка словарей в списке
- 6. словарь словарей
- 7. Как заполнить словарь словарей словарей?
- 8. Найти частоту элемента в списке словарей
- 9. Как найти значение в списке словарей python?
- 10. Как найти число появления в списке словарей
- 11. Найти ближайший элемент в отсортированном списке словарей
- 12. Как найти дубликаты в списке словарей
- 13. Словарь словарей в Swift
- 14. Словарь словарей в C#
- 15. Удалить словарь записей на основе конкретных критериев в Списке словарей
- 16. Как создать словарь словарей словарей в Python
- 17. Поиск в списке нескольких словарей
- 18. Свести словарь словарей списков других словарей списков
- 19. Мне нужно добавить словарь в словарь словарей
- 20. Удаление дубликатов в списке словарей
- 21. словарь словарей специальных тематических
- 22. Python слияния словарь словарей
- 23. Python Словарь списков словарей
- 24. VBA Словарь словарей?
- 25. Динамический словарь словарей Python
- 26. Словарь в списке - как найти значения
- 27. python словарь словарей
- 28. Swift словарь словарей
- 29. Как создать словарь словарей ...?
- 30. Сортировать словарь словарей питона
'next (t для t в билетах, если t ['summary'] == issue ['title'])' – Blender