Удалить словарь из другого словаря Python - PullRequest
1 голос
/ 18 июля 2011

Если A и B являются двумя словарями, использующими python, есть ли способ удаления элементов из словаря A, находящихся в словаре B?

Например,

parent_dict = {"a" : "aaa", "b" : "bbb", "c" : "ccc", "d" : "ddd", "e": "eee"}
derived_dict = {"a" : "aaa", "d" : "ddd", "e" : "eee"}

Теперь янеобходимо написать функцию dict_reduce (dictA, dictB), которая удаляет все элементы dictB из dictA.

(то есть) dict_reduce (parent_dict, производная_dict) должна дать {"b": "bbb", "c":" ccc "}

Моя работа с циклом for:

def dict_reduce(parent_dict, child_dict):
    for key in child_dict.keys():
        del parent_dict[key]
    return parent_dict

reduced_dict = dict_reduce(parent_dict, child_dict)

ПРИМЕЧАНИЕ:

  1. Будет замечательно, если решение будетодна строка или что-то, что не принимает цикл for.
  2. Также нам не нужно проверять, есть ли у родительского словаря ключ перед удалением, поскольку дочерний словарь является производным от родительского словаря.Поэтому не нужно думать о keyError.
  3. Родительский словарь - это статический словарь, который не должен зависеть от метода.Вместо этого возвращаемый словарь должен храниться в другом сокращенном словаре.
  4. Нет необходимости проверять, имеет ли child_dict такой же ключ, как у parent_dict.Только ключ имеет значение.

Ответы [ 4 ]

4 голосов
/ 18 июля 2011
{k: v for k, v in parent_dict.items() if k not in derived_dict}
2 голосов
/ 29 июля 2018

Использование словарей, представленных в вопросе:
dict (parent_dict.items () - производная_dict.items ()) или
dict (parent_dict.items () ^ производная_dict.items ())

0 голосов
/ 18 июля 2011

Если влияет parent_dict, это то, что вы хотите, это делает работу

map(parent_dict.pop, filter(lambda k: k in derived_dict, parent_dict))

(и также возвращает дубликаты ключей)

Этот вариант также проверяет (если требуется), что также значениясовпадение:

map(parent_dict.pop, filter(lambda k: k in derived_dict and derived_dict[k] == parent_dict[k], parent_dict))
0 голосов
/ 18 июля 2011
map(lambda k: del parent_dict[k], child_dict.keys())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...