我有两个字典,并希望将它们中的一部分合并在一起

时间:2016-11-12 22:09:18

标签: python dictionary modeling

假设我们有两个词典:

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'中的任何内容都会合并在一起。

如果其中一个左键为真,则新词典中的左键为真,如果两者均为假,则新词典中的左键保持为假。我也希望在正确的密钥上发生同样的事情。

2 个答案:

答案 0 :(得分:3)

使用字典理解,对每个字典的值应用三元运算符。当值为列表时,添加它们,否则使用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

答案 1 :(得分:0)

这是另一种方式

>>> 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}