2015-03-22 4 views
0

У меня два длинных списков объектов в Python: queries_list (список объектов запросов) и results_list (список объектов Result)Перебора два списка объектов Python

я хотел бы найти Result объектов, которые связанных с запросом, используя общее поле «search_id», я должен добавить связанные результаты в список запросов.

псевдокод, как показано ниже:

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

Похоже, у вас уже есть рабочее решение - что именно является здесь вопрос? Вы ищете лучший способ? Быстрее/эффективнее? –

+0

Да, я ищу более эффективное решение. – YNr

ответ

1

Ваш псевдокод почти питон-код, но вот вариант питона с помощью фильтра.

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.

1

Ваш псевдокод - почти 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] 
Смежные вопросы