早上看了类似的问题,我需要一些帮助,在字典列表上完成我的过滤器。
我有一个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 %}
我尝试在for循环之前初始化一个空列表并将过滤后的变量附加到它,但是我总是得到错误='generator object'没有属性'items':
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)
答案 0 :(得分:1)
这是因为您在以下循环的每次迭代中覆盖结果列表
for f in foo:
filtered = [d for d in list_of_dicts if f in d["name"]
如此过滤只保留f
的最后'-upload'
结果
filtered = list()
for f in foo:
filtered.extend([d for d in list_of_dicts if f in d["name"])