【问题标题】:merge two dictionaries with same key values合并两个具有相同键值的字典
【发布时间】:2019-03-13 07:12:50
【问题描述】:

我有两个包含相同键的字典

a = {'a':[3,2,5],
     'b':[9,8],
     'c':[1,6]}

b = {'b':[7,4],
     'c':[10,11]}

当我合并它们时,字典 b 的键会因为同名而替换 a 的键。这是我正在使用的合并代码

z = dict(list(a.items()) + list(b.items()))

有没有办法让我保留所有的键,我知道字典不能有相同的键名,但我可以使用这样的东西:

a = {'a':[3,2,5],
     'b':[9,8],
     'c':[1,6],
     'b_1':[7,4],
     'c_1':[10,11]}

【问题讨论】:

  • 提示:看看 Python 的 itertools 包。
  • @Jens 似乎有点过于笼统,无法命名一个包...不是很有帮助的评论...

标签: python python-3.x dictionary merge


【解决方案1】:

您可以在方法update()中使用生成器表达式:

a.update((k + '_1' if k in a else k, v) for k, v in b.items())
# {'a': [3, 2, 5], 'b': [9, 8], 'c': [1, 6], 'b_1': [7, 4], 'c_1': [10, 11]}

【讨论】:

  • 终于有pythonic了!
【解决方案2】:

也许做这样的事情:

a = {'a':[3,2,5],
     'b':[9,8],
     'c':[1,6]}

b = {'b':[7,4],
     'c':[10,11]}

z = {}

for key in a:
    if key in b:
        z[key + "_1"] = b[key]
        z[key] = a[key]
    else:
        z[key] = a[key]


print(z)                            

输出:

{'a': [3, 2, 5], 'b_1': [7, 4], 'b': [9, 8], 'c_1': [10, 11], 'c': [1, 6]}

【讨论】:

    【解决方案3】:

    虽然我认为 Usman 的答案可能是“正确”的解决方案,但从技术上讲,您要求这样做:

    for key, value in b.items():
      if key in a:
        a[key + "_1"] = value
      else:
        a[key] = value
    

    【讨论】:

    • for key, value in b: ValueError: not enough values to unpack (expected 2, got 1)
    • 如果 case 没有合并列表 a 和 b 的值以匹配键并且代码给出错误:ValueError: not enough values to unpack (expected 2, got 1)
    • @PradeepPandey 从技术上讲,这是 OP 所要求的并给出了他们的示例。
    【解决方案4】:

    检查 b 的键是否存在于 a 中,然后将 key_1 的 b 值添加到 a 中,否则将 b 的值添加到 a 中作为键。

    a = {'a':[3,2,5],
         'b':[9,8],
         'c':[1,6]}
    
    b = {'b':[7,4],
         'c':[10,11]}
    for k in b:
        if k in a:
            a[k+'_1']=b[k]
        else:
            a[k]=b[k]
    print(a)
    

    【讨论】:

    • 再说一遍,不是 OP 想要的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多