Python: объединить два списка словарей, где один словарь имеет уникальный столбец - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть два списка словарей:

l1 = [{'a': 'mike', '4/22/20': 10}, {'b': 'bob', '4/22/20': 5}]
l2 = [{'a': 'mike', 'pop': 40, '4/22/20': 1}, {'b': 'bob', 'pop': 30, '4/22/20': 1}]

Я хочу объединить тезисы в один список, отформатированный как:

cl = [{'a': 'mike', 'pop': 40', '4/22/20': [10,1]}, {'b': 'bob', 'pop': 30, '4/22/20': [5,1]}]

Я посмотрел на многие связанные решения, но могу ' я не получил ничего, что я пытался сделать. Любые толчки приветствуются.

обновление для альтернативного форматирования, сбор временных рядов в единый словарный ключ:

l1 = [{'a': 'mike', '4/22/20': 10, '4/23/20': 11}, {'b': 'bob', '4/22/20': 5, '4/23/20': 9}]
l2 = [{'a': 'mike', 'pop': 40, '4/22/20': 1, '4/23/20': 1}, {'b': 'bob', 'pop': 30, '4/22/20': 1, '4/23/20': 2}]

, что приводит к:

cl = [{'a': 'mike', 'pop': 40', 'time_data': {'4/22/20': [10,1], '4/23/20': [11,1]}}, {'b': 'bob', 'pop': 30, 'time_data': {'4/22/20': [5,1], '4/23/20': [9,2]}}]

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

1 Ответ

0 голосов
/ 23 апреля 2020

В результате получается список, не являющийся диктом

def merge(d1, d2):
  for k in set(d1+d2):
    if k in d1:
      v1 = d1[k]
      if k in d2:
        v2 = d2[k]
        yield k, (v1 if v1 == v2 else [v1, v2])
      else:
        yield k, v1
    else:
      yield k, d2[k]
[dict(merge(d1, d2)) for d1, d2 in zip(l1, l2)]
...