Вставляет значения по всем ключам, вместо заданного
Есть словарь 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
Теперь все заполняется красиво и легко.
Но все-таки можно ли где-нибудь почитать о том, как грамотно заполнять вложенные словари, да и словари в целом.