Как заполнить словарь сложной конструкции?

Рейтинг: 1Ответов: 1Опубликовано: 18.08.2023

Есть словарь вот такой конструкции:

{
 'DV': 
     {
       '1': {'dict_id': 'DV', 'tags': '', 'value': ''},
       '10': {'dict_id': 'DV', 'tags': '', 'value': ''},
       '100': {'dict_id': 'DV', 'tags': '', 'value': ''},
       '101': {'dict_id': 'DV', 'tags': '', 'value': ''}
     }
}

И есть список [1, 2, 3, 4]

Как заполнить словарь, чтобы элементы этого списка были в полях value? То есть ожидаемый эффект:

{
 'DV':
     {
       '1': {'dict_id': 'DV', 'tags': '', 'value': '1'},
       '10': {'dict_id': 'DV', 'tags': '', 'value': '2'},
       '100': {'dict_id': 'DV', 'tags': '', 'value': '3'},
       '101': {'dict_id': 'DV', 'tags': '', 'value': '4'}
     }
}

Ответы

▲ 1Принят

Вот так:

lst = [1, 2, 3, 4]
dct = {
 'DV': 
     {
       '1': {'dict_id': 'DV', 'tags': '', 'value': ''},
       '10': {'dict_id': 'DV', 'tags': '', 'value': ''},
       '100': {'dict_id': 'DV', 'tags': '', 'value': ''},
       '101': {'dict_id': 'DV', 'tags': '', 'value': ''}
     }
}

for e, d in zip(lst, dct['DV']):
    dct['DV'][d]['value'] = str(e)

print(dct)

Здесь мы на первой итерации берём пару 1 (первый элемент lst) и '1' (первый ключ вложенного словаря), преобразовываем число-первый элемент lst в строку и сохраняем его в ключ 'value' словаря dct['DV']['1']. И так далее.

Вывод:

{
    'DV':
        {
          '1': {'dict_id': 'DV', 'tags': '', 'value': '1'},
          '10': {'dict_id': 'DV', 'tags': '', 'value': '2'},
          '100': {'dict_id': 'DV', 'tags': '', 'value': '3'},
          '101': {'dict_id': 'DV', 'tags': '', 'value': '4'}
        }
}

Но этот код будет работать, только если кол-во элементов в списке lst равно кол-ву ключей в словаре dct['DV'].