Как добавить элементы из одного словаря в другой? питон - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть основной словарь.

mainDict = {'count': 10, 'a': {'abc': {'additional': 0, 'missing': 0, 'changed': 0}}}

Теперь у меня есть новый словарь с теми же ключами, что и в mainDict, названный этим словарем как b с другими значениями.

b = {'count': 20, 'a': {'abc': {'additional': 10, 'missing': 10, 'changed': 10}}}

Я хочу обновить (операция сложения) значения ключей в главном словаре, поэтому я делаю ..

mainDict = {'count': mainDict['count'] + b['count'], 'a': }

Я застрял при обновлении значений key a. Если я использую mainDict.update (b), он заменит предыдущие значения. Любое эффективное решение ??

Требуется окончательный вывод:

mainDict = {'count': 30, 'a': {'abc': {'additional': 10, 'missing': 10, 'changed': 10}}}

Спасибо

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011
def recursive_dict_sum_helper(v1, v2):
    # "add" two values: if they can be added with '+', then do so,
    # otherwise expect dictionaries and treat them appropriately.
    try: return v1 + v2
    except: return recursive_dict_sum(v1, v2)

def recursive_dict_sum(d1, d2):
    # Recursively produce the new key-value pair for each
    # original key-value pair, and make a dict with the results.
    return dict(
        (k, recursive_dict_sum_helper(v, d2[k]))
        for (k, v) in d1.items()
    )

mainDict = recursive_dict_sum(mainDict, b)
1 голос
/ 01 ноября 2011

Я бы написал:

def sum_dicts_recursive(d1, d2):
    for k, v1 in d1.items():
        if isinstance(v1, dict):
            yield (k, dict(process(v1, d2[k])))
        else:
            yield (k, v1 + d2[k])

result = dict(sum_dicts_recursive(mainDict, b))
# {'count': 30, 'a': {'abc': {'changed': 10, 'additional': 10, 'missing': 10}}}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...