2015-03-03 2 views
0

У меня есть два диктата, которые имеют одни и те же ключи, но имеют разные значения. Каждое значение представляет собой набор так:обновить набор внутри понимания dict?

d1 = {'a': set(["a","b","c"]), 'b': set(["x","y","c"])} 
d2 = {'a': set(["a","b","yu"]), 'b': set(["x","y","ri"])} 

Я хотел бы создать новую Dict, d3, который содержит те же ключи, как d1 и d2, но со значениями, которые являются результатом обновления каждого набором d1[key] с d2[key] Я хотел бы сделать это внутри Dict понимания, что-то вроде:

d3 = {k: d1[k].update(d2[k]) for k in d1} 

Однако, результат:

d1[k].update(d2[k]) 

Конечно это None, и я получаю Dict как:

d3 = {'a':None, 'b':None} 

Любые идеи?

+1

Вы могли бы предоставить ожидаемый результат, пожалуйста? – wastl

+0

update() изменяет dict на месте, он не возвращает обновленный dict. Возвращаемое значение - None. –

ответ

1

update - это версия на месте. Метод, который возвращает новый набор и оставляет исходный неизменным, равен union; в качестве альтернативы, вы можете использовать оператор |

d3 = {k: d1[k].union(d2[k]) for k in d1} 
# or 
d3 = {k: d1[k] | d2[k] for k in d1} 
+0

Спасибо !!!, он работает – Kaervas

+0

@MartijnPieters: Упс, забыли ключи. Благодарю. – user2357112

+0

@ user2357112: еще лучше; Я повторил OP с помощью строки. –

0

ли это то, что вы хотите? Я не уверен

d3 = {k: d1[k] | d2[k] for k in d1} 
Смежные вопросы