通过子串列表过滤字典列表

时间:2016-02-22 13:35:23

标签: python flask

早上看了类似的问题,我需要一些帮助,在字典列表上完成我的过滤器。

我有一个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)

1 个答案:

答案 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"])