如何在Python中填充另一个列表中的循环列表?

如何在Python中填充另一个列表中的循环列表?,python,django,list,foreach,request,Python,Django,List,Foreach,Request,我正在Django上创建一个搜索页面,并希望生成一个动态查询集 我有一个字符串筛选器列表,初始化如下: filter_clauses = [Q(filter=request.GET.get(filter)) for filter in filter_names if request.GET.get(filter)] filter\u name=('filter1','filter2') 然后,我想在我的fi

我正在Django上创建一个搜索页面,并希望生成一个动态查询集

我有一个字符串筛选器列表,初始化如下:

filter_clauses = [Q(filter=request.GET.get(filter))
                      for filter in filter_names
                      if request.GET.get(filter)]
filter\u name=('filter1','filter2')

然后,我想在我的filter\u names列表中循环,并为请求中的每个过滤器创建一个Q对象列表(filter\u names中的名称相同)。我正在创建Q列表,如下所示:

filter_clauses = [Q(filter=request.GET.get(filter))
                      for filter in filter_names
                      if request.GET.get(filter)]
问题在于结果列表(filter_子句)类似于:

Q(filter=value1),
Q(filter=value2)
但实际上我想要一个如下的列表:

Q(filter1=value1),
Q(filter2=value2)
实际上,循环不是捕获变量filter的值,而是将其解释为“filter”

那么,我在循环中是否做错了什么?

关于更多信息,我从中吸取了这个想法,我得到了以下错误:

无法将关键字“filter”解析为字段


这意味着框架正在搜索名为“filter”的搜索模型中的字段,但显然找不到该字段。

您可以使用关键字参数解包:

filter_clauses = [Q(**{filter: request.GET.get(filter)})
                      for filter in filter_names
                      if request.GET.get(filter)]

这里,
filter
的值是字典中的键,因此当您解包参数时,参数名称将是
filter1
等。

您可以使用关键字参数解包:

filter_clauses = [Q(**{filter: request.GET.get(filter)})
                      for filter in filter_names
                      if request.GET.get(filter)]
在这里,
filter
的值是字典中的键,因此当您解压缩参数时,参数名将是
filter1