2016-11-12 74 views
1

比方说,我们有两点字典:我有两个库,并希望他们的合并在一起一部分

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

另外,如果其中一个左键是真的,则新词典中的左键将为真,如果两者均为假,则新词典中的左键仍为假。我也想同样的事情发生在正确的关键。

+0

你真的*试过*什么?发生了什么? – jonrsharpe

+0

我遇到的一个问题是,如果我有一个列表并将其放入我的函数中,它最终会以true或false的字典形式出现,但如果我输入的列表是空的,则可能是空的,取决于哪个列表是空的它在......(没有解释得很好),但我想我克服了这个障碍。 –

+0

然后显示该问题的[mcve]。 – jonrsharpe

回答

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

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} 
相关问题