Объединить два списка списков - Python - PullRequest
1 голос
/ 29 апреля 2009

Это отличный учебник, но он не отвечает тому, что мне нужно: Объединение двух отсортированных списков в Python

У меня есть два списка Python, каждый из которых представляет собой список даты и времени, пары значений:

list_a = [['1241000884000', 3], ['1241004212000', 4], ['1241006473000', 11]]

И

list_x = [['1241000884000', 16], ['1241000992000', 16], ['1241001121000', 17], ['1241001545000', 19], ['1241004212000', 20], ['1241006473000', 22]]
  1. На самом деле существует множество списков list_a с разными ключами / значениями.
  2. Все даты в list_a находятся в списке list_x.
  3. Я хочу создать список list_c, соответствующий каждому list_a, который имеет каждый datetime из list_x и value_a / value_x.

Бонус:

В моей настоящей программе list_a на самом деле представляет собой список в словаре. Принятие ответа на уровне словаря будет:

dict = {object_a: [['1241000884000', 3], ['1241004212000', 4], ['1241006473000', 11]], object_b: [['1241004212000', 2]]}

Хотя я могу понять эту часть.

Ответы [ 4 ]

4 голосов
/ 29 апреля 2009

Вот код, который делает то, что вы просили. Вы можете легко превратить свой список пар в словарь. Тогда общие ключи можно найти, пересекая наборы ключей. Наконец, создание словаря результатов легко, учитывая набор общих ключей.

dict_a = dict(list_a)
dict_x = dict(list_x)

shared_keys = set(dict_a).intersection(set(dict_x))

result = dict((k, (dict_a[k], dict_x[k])) for k in shared_keys)
3 голосов
/ 29 апреля 2009

"Я хочу создать список list_c, соответствующий каждому списку list_a, который имеет каждый datetime из list_x и value_a / value_x."

def merge_lists( list_a, list_x ):
    dict_x= dict(list_x)
    for k,v in list_a:
        if k in dict_x:
            yield k, (v, dict_x[k])

Нечто подобное тоже может сработать.

merged= list( merge_lists( someDict['object_a'], someDict['object_b'] )

Это может быть немного быстрее, потому что он делает только один словарь для поиска и оставляет другой список в покое.

2 голосов
/ 25 ноября 2009

Ничто не сравнится с хорошим функциональным однострочником:

reduce(lambda l1,l2: l1 + l2, list)
0 голосов
/ 26 октября 2009

Можно попробовать расширить:

list_a.extend(list_b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...