Как создать третий словарь из двух других, с ключами которые есть в первом, но нет во втором словаре?
У меня есть 2 словаря:
y_dict_1 = {"name": "Ray",
"age": 45,
"les": "Ry"}
my_dict_2 = {"name": "Nick",
"job": "actor"}
- Как мне создать новый словарь из пар {ключ:значение}, для ключей, которые есть в первом, но нет во втором словаре? И второй вопрос:
- Как объединить эти два словаря в новый словарь:
- если ключ есть только в одном из двух словарей - поместить пару ключ:значение,
- если ключ есть в двух словарях - поместить пару {ключ: [значение_из_первого_словаря, значение_из_второго_словаря]}
Я пытался сделать следующее:
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 шт):
Как мне создать новый словарь из пар {ключ:значение}, для ключей, которые есть в первом, но нет во втором словаре?
так:
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())
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 местами
Ответ на первый вопрос в одну строку
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}
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).