2016-11-12 6 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

Одна из проблем, с которыми я столкнулся, заключалась в том, что если бы у меня был список и поместил его в мою функцию, он в конечном итоге выйдет как словарь с истинным или ложным, но если входной список списка пуст, чем правый или левый, может быть пустым, в зависимости от того, какой из них он был в ... (не очень хорошо объяснил), но я думаю, что преодолел это препятствие. –

+0

Затем покажите [mcve] этой проблемы. – jonrsharpe

ответ

3

Используйте понимание словаря, которое применяет тернарный оператор к значениям каждого dict. Когда значения списки, добавлять их, в противном случае используйте 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}