Проведя утро, глядя на похожие вопросы, мне нужно немного помочь закончить мой фильтр в списке словарей.Фильтрация списка словарей по списку подстрок
У меня есть список словарей, возвращаемых из вызова API, который я хочу фильтровать, чтобы возвращать списки, где значение «name» содержит определенные подстроки.
Следующий код работает наполовину. Он возвращает только имена job.names, которые содержат конечную подстроку в списке: («-upload»).
def filter():
list_of_dicts = server.get_jobs()
foo = ["-cb", "-audit", "-upload"]
for f in foo:
filtered = [d for d in list_of_dicts if f in d["name"]
return render_template("testing.html", jobs=filtered)
Для полноты этого передается:
{% for job in jobs %}
<p>Job: {{job.name}}</p>
{% endfor %}
Я попытался инициализацией пустого списка перед циклом и добавлением отфильтрованного переменного к нему, но я всегда получаю ошибку = «объект генератор» не имеет атрибута «элементов»:
def filter():
list_of_dicts = server.get_jobs()
foo = ["-cb", "-audit", "-upload"]
for f in foo:
result = []
filtered = [d for d in list_of_dicts if f in d["name"]
result.append(filtered)
return render_template("testing.html", jobs=result)
Вместо создания 'filtered' в цикле:' отфильтрованный = [D для г в list_of_dicts если (е в d ["name"] для f в foo] ' – khelwood
Это работает, однако, как есть задание в list_of_dicts с каждой из подстрок (job1-cb, job1-audit, job1-upload), я получаю повторяющиеся значения для каждый результат (job1-cb x3, job1-audit x 3, job1-upload x3). Есть идеи? – Gillespie
@ Gillespie, если вы не хотите повторений, сделайте это 'set' вместо понимания' list'. Просто измените его на 'filter = {d for d ...}' – dwanderson