Python:合并两个字典列表,其中一个字典具有唯一列

时间:2020-04-23 04:41:08

标签: python dictionary

我有两个字典列表:

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 :(得分:0)

结果是列表而不是字典

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)]