Python

Pyton Объединение словарей в питоне, если ключи второго равны значениям первого

У меня есть два словаря. Один из них содержит ключи, которые равны значению предыдущего, могу ли я создать единый словарь?
d1={'k': ['k'], 'a': ['a1', 'e1', 'e4'], 'g': ['g']}
d2={'k': 2 , 'a1' : 3, 'e1':5 'e4':2, g': 1}
Или добавить значение второго словаря в первый вроде:
d3={'k': ['k', 2], 'a': ['a1',3, 'e1',5, 'e4',2], 'g': ['g',1]} (при необходимости можно заменить число на str)
Р)
Руслан )
50
Я тоже сделал из теоретического интереса. Как всегда длинно, но главное что искомый результат получен
И получилось ИМЕННО { 'k': ['k', 2], 'a': ['a1',3, 'e1',5, 'e4',2], 'g': ['g',1] }
Руслан Шпет
Руслан Шпет
73 303
Лучший ответ
# Если изменять первый исходный
d1= { 'k': ['k'], 'a': ['a1', 'e1', 'e4'], 'g': ['g'] }
d2= { 'k': 2 , 'a1' : 3, 'e1':5, 'e4':2, 'g': 1 }

print(d1)
print(d2)
print()
for k in d1:
~~~~if k in d2:
~~~~~~~~d1[k].append(d2[k])
print(d1)
print()

#---------------
# Если не изменять исходные
import copy

d1= { 'k': ['k'], 'a': ['a1', 'e1', 'e4'], 'g': ['g'] }
d2= { 'k': 2 , 'a1' : 3, 'e1':5, 'e4':2, 'g': 1 }

d3 = dict()
print(d1)
print(d2)
print(d3)
print()
for k in d1:
~~~~d3[k] = copy.deepcopy(d1[k])
~~~~if k in d2:
~~~~~~~~d3[k].append(d2[k])
print(d1)
print(d2)
print(d3)

==================
{'k': ['k'], 'a': ['a1', 'e1', 'e4'], 'g': ['g']}
{'k': 2, 'a1': 3, 'e1': 5, 'e4': 2, 'g': 1}

{'k': ['k', 2], 'a': ['a1', 'e1', 'e4'], 'g': ['g', 1]}

{'k': ['k'], 'a': ['a1', 'e1', 'e4'], 'g': ['g']}
{'k': 2, 'a1': 3, 'e1': 5, 'e4': 2, 'g': 1}
{}

{'k': ['k'], 'a': ['a1', 'e1', 'e4'], 'g': ['g']}
{'k': 2, 'a1': 3, 'e1': 5, 'e4': 2, 'g': 1}
{'k': ['k', 2], 'a': ['a1', 'e1', 'e4'], 'g': ['g', 1]}
>>>

Вместо deepcopy, для одномерных списков, достаточно
d3[k] = d1[k][:]
но если будут многомерные списки,
то срезом скопировать не получится
Ruslan Hisamov
Ruslan Hisamov
21 729
Руслан Шпет В первом случае получилось {'k': ['k', 2], 'a': ['a1', 'e1', 'e4'], 'g': ['g', 1]}
а не { 'k': ['k', 2], 'a': ['a1',3, 'e1',5, 'e4',2], 'g': ['g',1] }