Проблема : Скажи, у вас есть Словарь {0: «Алиса», 1: «Боб»}
И вы хотите создать Список словарей с копии из оригинального словаря: [{0: 'ALICE', 1: 'BOB'}, {0: 'ALICE', 1: 'BOB'}, {0: 'ALICE', 1: 'BOB'}]
Отказ
d = {0: 'Alice', 1: 'Bob'} dicts = [{**d} for _ in range(3)] print(dicts) # [{0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}]
Вы используете Понимание списка С «выбросом» петля Переменная подчеркивает _
Создать список из 3 элементов. Вы можете изменить значение 3, если вам нужно больше или меньше элементов в вашем Список Отказ
Выражение {** D}
Распаковывает все пары (ключ, значение) из оригинального словаря D
в новый словарь. Для получения дополнительной информации о операторе распаковки см. В этом руководстве по блогу Finxter.
Полученный список содержит копии исходного словаря. Если вы измените один, другие не увидят это изменение:
dicts[0][2] = 'Frank' print(dicts) # [{0: 'Alice', 1: 'Bob', 2: 'Frank'}, {0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}]
Только первый словарь в списке содержит новое значение ключа. (2: «Фрэнк») Что доказывает, что словари не указывают на тот же объект в памяти. Это было бы так, если бы вы использовали следующий метод
Копирование списка с одним словарем:
d2 = {0: 'Alice', 1: 'Bob'} dicts2 = [d2] * 3 print(dicts2) # [{0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}, {0: 'Alice', 1: 'Bob'}]
Метод выглядит правильно, но все три словари по существу одинаковы:
dicts2[0][2] = 'Frank' print(dicts2) # [{0: 'Alice', 1: 'Bob', 2: 'Frank'}, {0: 'Alice', 1: 'Bob', 2: 'Frank'}, {0: 'Alice', 1: 'Bob', 2: 'Frank'}]
Если вы измените один, вы меняете все.
Вы можете увидеть этот эффект самостоятельно в следующем инструменте визуализатора памяти:
Упражнение : Измените метод правильно, чтобы изменить влияет только на первый словарь!
Статьи по теме : Как создать список Python?
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.