2016-11-12 4 views
1

Disons que nous avons deux dictionnaires:J'ai deux dictionnaires et que vous souhaitez fusionner une partie d'entre eux ensemble

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

Comment puis-je les ajoute ensemble afin que le nouveau dictionnaire est la suivante:

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

donc tout ce qui est 'Disks' va fusionner.

De même, si l'une des touches de gauche est vraie, la touche de gauche du nouveau dictionnaire sera vraie et si les deux sont fausses, la touche de gauche du nouveau dictionnaire restera fausse. Je voudrais aussi que la même chose arrive à la bonne clé.

+0

Avez-vous réellement * essayé * quelque chose? Qu'est-il arrivé? – jonrsharpe

+0

l'un des problèmes que j'avais était si j'avais une liste et le mettre dans ma fonction il apparaîtrait finalement comme un dictionnaire avec vrai ou faux, mais si la liste que j'ai entrée était vide que droite ou gauche peut être vide selon lequel C'était ... (je n'ai pas très bien expliqué) mais je pense que j'ai surmonté cet obstacle. –

+0

Ensuite, montrez un [mcve] de ce problème. – jonrsharpe

Répondre

3

Utilisez une définition de dictionnaire qui applique un opérateur ternaire aux valeurs de chaque dict. Lorsque les valeurs sont des listes, les ajouter, sinon utilisez l'opérateur 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} 

Références:

Conditional expressions

Dictionary Comprehension

0

Voici une autre façon

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