Как слить два дикта в один

если у меня есть 2 дикта:

d1 = {1:[2,3,str],2:[4,5,str2]}
d2 = {3:[6,7],2:[8,9]}

и я хочу создать новый словарь, который будет содержать только ключи, которые появляются в обоих словарях

new_d = {2:[4,5,str2,8,9]}

что ты уже испробовал?

greedy52 20.04.2018 22:31

С каким кодом у вас возникли проблемы? Какие проблемы с кодом? Вы получаете сообщение об ошибке? Что за сообщение об ошибке? Результат, который вы получаете, не тот результат, которого вы ожидаете? Какого результата вы ожидаете и почему, какой результат вы получаете и чем они отличаются? Наблюдаемое вами поведение не является желаемым? Каково желаемое поведение и почему, каково наблюдаемое поведение и чем они отличаются? Пожалуйста, предоставьте минимальный воспроизводимый пример.

Jörg W Mittag 20.04.2018 22:44

Можете ли вы предоставить спецификацию точный того, что вы хотите, включая все правила, исключения из этих правил, угловые случаи, особые случаи, граничные случаи и крайние случаи? Можете ли вы предоставить образцы входных и выходных данных, демонстрирующие, что вы ожидаете, как в обычных случаях, так и во всех исключениях, угловых случаях, особых случаях, граничных случаях и пограничных случаях? Пожалуйста, также не забудьте предоставить минимальный воспроизводимый пример.

Jörg W Mittag 20.04.2018 22:44

«как разделить два словаря на один» - вы делаете это, написав программу, которая это делает. Если у вас возникла проблема с вашей программой, внимательно прочтите документацию по всем методам, классам, модулям и библиотекам, которые вы используете, напишите тесты для своих программ, отслеживайте выполнение ручкой и бумагой, выполните пошаговое выполнение в отладчике, затем усните на нем, начните снова с начала, снова усните, и тогда и только тогда сузит вашу проблему до краткого, целенаправленного, простого, короткого, воспроизводимого минимальный воспроизводимый пример и задает конкретный, сфокусированный, узкий вопрос о Переполнение стека.

Jörg W Mittag 20.04.2018 22:44

@ JörgWMittag, почему пример абсолютно необходим? Иногда даже не знаешь, с чего начать.

Mark Ransom 20.04.2018 22:49

@MarkRansom: Во-первых, это показывает, что ОП действительно приложили все усилия для решения проблемы сами. Я полностью согласен с тем, что здесь, на этом сайте, есть примеры находятся хорошо исследованных, хорошо сформулированных, хорошо отформатированных, чрезвычайно ценных, нерешенных вопросов, которые не содержат никакого кода, но я заявлю, что этот конкретный вопрос не входит в их число .

Jörg W Mittag 20.04.2018 22:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
6
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
{k: d1[k] + d2[k] for k in set(d1.keys()).intersection(d2.keys())}

Эта конструкция {... for ... in ... } называется словарным пониманием.

.keys() на самом деле не нужны в обоих случаях, но они проясняют, что происходит. Самый короткий вариант:

{k: d1[k] + d2[k] for k in set(d1) & set(d2)}

Оператор & примерно эквивалентен .intersection для наборов, а set(d1) работает, потому что итерация по словарю выполняет итерацию по его ключам.

Другие вопросы по теме