【问题标题】:I have two dictionaries and want to merge part of them together我有两本字典,想将其中的一部分合并在一起
【发布时间】:2016-11-12 22:09:17
【问题描述】:

假设我们有两个字典:

c1 = {'Disks': [1, 3, 6, 2], 'left': True, 'right': False}
c2 = {'Disks': [0, 5, 7, 9, 8], 'left': False, 'right': True} 

如何将它们添加在一起,以便新字典如下:

{'Disks': [1, 3, 6, 2, 0, 5, 7, 9, 8], 'left': True, 'right': True}

所以基本上'Disks' 中的所有内容都会合并在一起。

此外,如果其中一个左键为真,则新字典中的左键将为真,如果两者均为假,则新字典中的左键仍为假。我也希望同样的事情发生在正确的键上。

【问题讨论】:

  • 你真的尝试过什么吗?发生了什么?
  • 我遇到的一个问题是,如果我有一个列表并将其放入我的函数中,它最终会以字典的形式显示为真或假,但如果我输入的列表为空而不是右或左可能是空的,取决于它在哪一个......(没有很好地解释)但我认为我克服了这个障碍。
  • 然后显示该问题的minimal reproducible example

标签: python dictionary modeling


【解决方案1】:

使用对每个字典的值应用三元运算符的字典推导。当值是列表时,添加它们,否则使用or 运算符:

c = {k: v + c2[k] if isinstance(v, list) else v or c2[k] 
                                  for k, v in c1.items()}
print(c)
# {'Disks': [1, 3, 6, 2, 0, 5, 7, 9, 8], 'right': True, 'left': True}

参考资料:

Conditional expressions

Dictionary Comprehension

【讨论】:

    【解决方案2】:

    还有一种方法

    >>> c1 = {'Disks':[1,3,6,2], 'left' :True, 'right': False}
    >>> c2 = {'Disks' :[0,5,7,9,8], 'left':False, 'right':True }
    # merge values from two dictionaries.
    >>> x = zip(c1.values(), c2.values())
    # Handle list types merging
    >>> x = [y[0] + y[1] if type(y[0]) is list else y for y in x]
    # Handle boolean types merging
    >>> x = [y[0] or y[1] if type(y[0]) is bool else y for y in x]
    # create the final dictionary
    >>> dict(zip(c1.keys(), x))
    {'Disks': [1, 3, 6, 2, 0, 5, 7, 9, 8], 'right': True, 'left': True}
    

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2023-02-20
      • 2011-02-17
      • 2021-03-13
      相关资源
      最近更新 更多