Как создать третий словарь из двух других, с ключами которые есть в первом, но нет во втором словаре?

У меня есть 2 словаря:

y_dict_1 = {"name": "Ray",
             "age": 45,
             "les": "Ry"}
my_dict_2 = {"name": "Nick",
             "job": "actor"}
  1. Как мне создать новый словарь из пар {ключ:значение}, для ключей, которые есть в первом, но нет во втором словаре? И второй вопрос:
  2. Как объединить эти два словаря в новый словарь:
  • если ключ есть только в одном из двух словарей - поместить пару ключ:значение,
  • если ключ есть в двух словарях - поместить пару {ключ: [значение_из_первого_словаря, значение_из_второго_словаря]}

Я пытался сделать следующее:

my_dict_3 = {}
for key in my_dict_1:
    for key_2 in my_dict_2:
        if key != key_2:
            my_dict_3.update(my_dict_1{key})
            print(my_dict_3)

выдает ошибку. Что делаю не так? как решить задачи, при этом не используя import?

my_dict_3.update(my_dict_1{key})
                              ^
SyntaxError: invalid syntax

Ответы (4 шт):

Автор решения: Zhihar

Как мне создать новый словарь из пар {ключ:значение}, для ключей, которые есть в первом, но нет во втором словаре?

так:

y_dict_1 = {"name": "Ray",
             "age": 45,
             "les": "Ry"}
my_dict_2 = {"name": "Nick",
             "job": "actor"}

res = dict((key, y_dict_1[key]) for key in y_dict_1 if key not in my_dict_2)

print(res)

или так:

res = dict(item for item in y_dict_1.items() if item[0] not in my_dict_2)

Как объединить эти два словаря в новый словарь: если ключ есть только в одном из двух словарей - поместить пару ключ:значение, если ключ есть в двух словарях - поместить пару {ключ: [значение_из_первого_словаря, значение_из_второго_словаря]}

так:

y_dict_1 = {"name": "Ray",
             "age": 45,
             "les": "Ry"}
my_dict_2 = {"name": "Nick",
             "job": "actor"}

res = dict()

for item in y_dict_1.items():
    if item[0] not in my_dict_2:
        res[item[0]] = item[1]
    else:
        res[item[0]] = [item[1], my_dict_2[item[0]]]

print(res)

или так:

for item in y_dict_1.items():
    res[item[0]] = item[1] if item[0] not in my_dict_2 else [item[1], my_dict_2[item[0]]]

или так:

res = dict((item[0], item[1] if item[0] not in my_dict_2 else [item[1], my_dict_2[item[0]]]) for item in y_dict_1.items())
→ Ссылка
Автор решения: Andrey Maslov
y_dict_1 = {"name": "Ray", "age": 45, "les": "Ry"}
my_dict_2 = {"name": "Nick", "job": "actor"}

result_dict = {
    key: y_dict_1[key]  for key in set(y_dict_1) - set(my_dict_2)
}
result_dict = {}
result_dict.update(y_dict_1)
result_dict.update(my_dict_2)

если будет нужно окончательное значение не из второго, а из первого словаря, поменяй два update местами

→ Ссылка
Автор решения: inzem77

Ответ на первый вопрос в одну строку

In [68]: d1
Out[68]: {1: 1, 3: 3, 5: 5}

In [69]: d2
Out[69]: {2: 2, 1: 1, 4: 4}

In [70]: { i: d1[i] for i in set(d1.keys())-set(d2.keys())}
Out[70]: {3: 3, 5: 5}
→ Ссылка
Автор решения: MarianD
result1 = {key: my_dict_1[key] for key in my_dict_1.keys() - my_dict_2}

common_keys = my_dict_1.keys() & my_dict_2

result2 = my_dict_1.copy()
result2.update(my_dict_2)
result2.update({key: [my_dict_1[key], my_dict_2[key]] for key in common_keys})

Для первого результата сделана разность множеств ключей (my_dict_1.keys() - my_dict_2), для второго их пересечение (my_dict_1.keys() & my_dict_2).

→ Ссылка