Цикл for не осуществляет перебор, что не так с кодом в python
Задача сформировать список словарей, однако цикл for не перебирает список в заданном диапазоне, а повторяет последнее сочетание ровно столько раз, сколько длина диапазона. Прошу строго не судить, делаю первые шаги в Python, вот код:
names = ['igor', 'dasha', 'martin', 'vladimir', 'rishat', 'maria', 'marat', 'petr', 'dima', 'polina', 'katya', 'elena']
ages = ['25', '24', '28', '26', '32', '45', '42', '54', '57', '41', '23', '27']
genders = ['male', 'female', 'male', 'male', 'male', 'female', 'male', 'male', 'male', 'female', 'female', 'female']
# определяем список для запаковки словарей
data = []
# создаем словарь имен с возрастом и полом
name_age_gender_dict = {}
# набиваем в цикле список словарями из списков имен с возрастом и полом
for i in range(len(names)):
name_age_gender_dict['name'] = name[i]
name_age_gender_dict['age'] = age[i]
name_age_gender_dict['gender'] = gender[i]
data.append(name_age_gender_dict)
print(f'''Словарь имен c возрастом и полом:{name_age_gender_dict}''')
print(f'\nСписок словарей:\n', data)
результат работы кода:
Словарь имен c возрастом и полом:{'name': 'elena', 'age': '27', 'gender': 'female'}
Список словарей:
[{'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}, {'name': 'elena', 'age': '27', 'gender': 'female'}]
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Вы добавляете в список ссылку на один и тот же словарь. Нужно создавать новый словарь на каждой итерации цикла. И вообще можно проще:
# набиваем в цикле список словарями из списков имен с возрастом и полом
for i in range(len(names)):
name_age_gender_dict = {
'name': names[i],
'age': ages[i],
'gender': genders[i],
}
data.append(name_age_gender_dict)
Вообще питонический способ работы с объектами - это не переиспользовать старые объекты, особенно коллекции, а стараться создавать новые объекты, особенно внутри циклов. Так меньше шансов нарваться на побочные эффекты, как это у вас получилось.