【问题标题】:Iterating through two lists of objects Python遍历两个对象列表 Python
【发布时间】:2015-05-25 05:21:52
【问题描述】:

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

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

伪代码如下:

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

【问题讨论】:

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

标签: python list object iteration


【解决方案1】:

您的伪代码几乎是 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 尝试按 id 对结果和查询进行排序。

【讨论】:

    【解决方案2】:

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

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

    这是假设您的查询对象已经具有results 属性。

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

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-29
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      相关资源
      最近更新 更多