Необходимо добавить значения словаря в словарь - PullRequest
0 голосов
/ 31 октября 2018

У меня есть функция, которая возвращает что-то вроде этого

{a:{b:{c:4}}}

и когда я снова вызову эту функцию в цикле, она вернет

{a:{b:{d:5}}}

и снова вернется

{a:{b:{e:6}}}

Так что я хочу, чтобы мой окончательный результат был {a:{b:{c:4, d:5, e:6}}}

Я пытался

final_output.update(func)

Но это будет обновляться как final_output как {a:{b:{e:6}}}

    def create_dict(self, make_dict, key, value):
        final_dict = make_dict
        keys = key.split('.')
        latest = keys.pop()
        for key in keys:
            final_dict = final_dict.setdefault(key, {})
        final_dict.setdefault(latest, value)

self.create_dict(status_dict, '{}.{}.{}'.format(name, ton_set.id, ton_id),
                                                  status)

Вот моя функция func = create_dict.

Поможет ли мне defaultdict в этой ситуации?

Ответы [ 3 ]

0 голосов
/ 31 октября 2018
d1={'a': {'b': {'c': 4}}} 
d2={'a': {'b': {'d': 5}}} 
d3={'a': {'b': {'e': 6}}} 
d3['a']['b'].update(dict(d1['a']['b'].items() + d2['a']['b'].items()))

print d3 {'a': {'b': {'c': 4, 'e': 6, 'd': 5}}}
0 голосов
/ 31 октября 2018
def update_only_new(original_dict, to_add):
    for key in to_add.iterkeys():
        if key not in original_dict:
            original_dict[key] = to_add[key]
        else:
            update_only_new(original_dict[key], to_add[key])

> dct={} 
> d1 = {'a': {'b': {'c': 4}}} 
> d2 = {'a': {'b': {'d': 5}}}    
> d3 = {'a': {'b': {'e': 6}}} 
> update_only_new(dct,d1) 
> print dct 
  {'a': {'b': {'c': 4}}} 
> update_only_new(dct,d2) 
> print dct 
  {'a': {'b': {'c': 4, 'd': 5}}} 
> update_only_new(dct,d3) 
> print dct 
  {'a': {'b': {'c': 4, 'e': 6,'d': 5}}}
0 голосов
/ 31 октября 2018

Вы можете написать такую ​​функцию:

def update_dict(my_dict, value, key):
    my_dict[key] = value
    return my_dict

my_dict = {}
my_dict = update_dict(my_dict, 4, 'key')
print(my_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...