Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
遍历Python中的两个对象列表_Python_List_Object_Iteration - Fatal编程技术网

遍历Python中的两个对象列表

遍历Python中的两个对象列表,python,list,object,iteration,Python,List,Object,Iteration,我在Python中有两个长长的对象列表: 查询列表(查询对象列表)和 结果列表(结果对象列表) 我想使用公共字段“search\u id”查找与查询相关的结果对象,然后我应该将相关结果附加到Query.results列表中 伪代码如下所示: for q in queries_list for r in results_list if q.search_id == r.search_id q.results.append(r) 您的伪代码几乎是pyth

我在Python中有两个长长的对象列表: 查询列表(查询对象列表)和 结果列表(结果对象列表)

我想使用公共字段“search\u id”查找与查询相关的结果对象,然后我应该将相关结果附加到Query.results列表中

伪代码如下所示:

for q in  queries_list
   for r in results_list
       if q.search_id == r.search_id
           q.results.append(r)

您的伪代码几乎是python代码,但这里有一个使用过滤器的python变体

for query in queries_list:
   hasQueryId = lambda result: result.search_id == query.search_id
   query.results.extend(filter(hasQueryId, results_list))

这将导致填充所有查询结果列表。这仍然是O(m*n),如果您正在寻找更有效的方法,请尝试按Id对结果和查询进行排序。

您的伪代码几乎就是Python。你只是缺少冒号:

for q in queries_list:
   for r in results_list:
       if q.search_id == r.search_id:
           q.results.append(r)
这是假设您的查询对象已经具有
结果
属性

如果没有,您可以在运行时创建它们:

for q in queries_list:
   for r in results_list:
       if q.search_id == r.search_id:
           try:
               q.results.append(r)
           except AttributeError:
               q.results = [r]

看起来你已经有了一个有效的解决方案-这里的问题到底是什么?你在找更好的方法吗?更快/更有效的方法?是的,我正在寻找更有效的解决方案。