Вставляет значения по всем ключам, вместо заданного

Есть словарь fioMap следующей структуры:

фио:  
   день1:  
        номер_заявки1: значение  
        номер_заявки2: значение  
        номер_заявки3: значение  
  ....  

Вид словаря до заполнения:

{  
  'Иванов Иван Иванович': {  
         '2021-05-01': {},   
         '2021-05-02': {},  
              ....  
         '2021-05-31': {}  
  },  
  'Петров Петр Петрович': {  
         '2021-05-01': {},   
         '2021-05-02': {},  
              ....  
         '2021-05-31': {}  
  },   
  'Александров Александр Александрович':  
              ......  
}

Выполнив следующий код: fioMap['Иванов Иван Иванович']['2021-05-01']['number113'] = 7

У меня заполняется первый день у ВСЕХ людей до конца словоря. Хотя я хочу что бы он заполнился только у Иванов Иван Иванович.

Вид словаря после заполнения:

{  
  'Иванов Иван Иванович': {  
         '2021-05-01': { 'number113': 7},   
         '2021-05-02': {},  
             ....  
         '2021-05-31': {}  
  },  
  'Петров Петр Петрович': {  
         '2021-05-01': { 'number113': 7 },    
         '2021-05-02': {},  
             ....  
         '2021-05-31': {}  
  },   
  'Александров Александр Александрович':  
         '2021-05-01': { 'number113': 7 }, 
            ......  
}  

Причем, следующий код: print(fioMap['Бородин Сергей Александрович']['2021-05-01'])
Выведет только одно значнение : { 'number113': 7}

Почему у меня заполняются все дни, если я изначально указываю, что хочу заполнить день у конкретного фио? Как сделать так что бы заполнялся только конкретное фио?

upd:

У меня словарь генерируется следующим образом:

fioMap = {}
for id in workerViewMap:
    #print(workerViewMap[id])
    fioMap[workerViewMap[id].get('worker_fio')] = {}

На этом этапе fioMap имеет вид фио: {}

Далее я генерирую словарь с датами:

dayMap = {}
for id in workerViewMap:
    day = workerViewMap[id].get('work_day')
    dayMap[day] = {}

Словарь dayMap выглядит как: день1: {}

Причем дней всегда 31(ну или 30, короче сколько в месяце - столько и дней)

for id in workerViewMap:
    fio = workerViewMap[id].get('worker_fio')
    fioMap[fio] = dayMap

Вот здесь я обращаюсь к fioMap по ключу(фамилии) и присваиваю ему dayMap

В итоге получается словарь такого вида, который я показал выше.

Может ли быть такое, что у меня все ФИО в fioMap на самом деле ссылаются на один словарь dayMap. И Именно поэтому при изменении у одного - изменяет у всех. Если это так, то как сделать так, что бы у каждого фио был свой dayMap.


Подскажите тогда как правильно заполнять вложенные словари?


Ответы (1 шт):

Автор решения: Ярослав

Ошибка была именно в том, что все значения по ключам(фио)
Ссылались на один и тот же объект dayMap.

Изменив генерацию словаря таким образом, что у меня для каждого фио создается новый dayMap ошибка исчезла.

for fio in fioMap:
    dayMap = {}
    for id in workerViewMap:
        day = workerViewMap[id].get('work_day')
        dayMap[day] = {}
    fioMap[fio] = dayMap

Теперь все заполняется красиво и легко.
Но все-таки можно ли где-нибудь почитать о том, как грамотно заполнять вложенные словари, да и словари в целом.

→ Ссылка