Словарь в Python может хранить множество пар ключ-значение в одном месте. Копирование данных вручную может занять много времени.

Иногда мы вносим некоторые изменения в исходные данные, но через некоторое время нам необходимо восстановить предыдущие данные (которые невозможно сохранить обратно). Итак, нам не следует менять исходные данные, пока мы не уверены.

Например, есть технологическая компания, в которой есть четыре разных отдела. Ежегодно они сохраняют количество сотрудников, работающих в разных отделах, в виде словаря Python. Что они делают, так это берут прошлогодние данные и делают их копию, а затем обновляют скопированную информацию необходимым обновлением.

 employee_2022 = {
     'Networking': 5,
     'Cyber security': 10,
     'Developer': 12,
     'Administration': 8
}

print('Numbers of employees working in 2022: \n', employee_2022)

employee_2023 = dict(employee_2022)
print('Numbers of employees working in 2023: \n', employee_2023)

employee_2023['Developer']: 14
print('updated employee data in 2023: \n', employee_2023)

В качестве вывода этого кода:

Numbers of employees working in 2022: 
 {'Networking': 5, 'Cyber security': 10, 'Developer': 12, 'Administration': 8}
Numbers of employees working in 2023: 
 {'Networking': 5, 'Cyber security': 10, 'Developer': 12, 'Administration': 8}
updated employee data in 2023: 
 {'Networking': 5, 'Cyber security': 10, 'Developer': 14, 'Administration': 8}
Previous year(2022) employee data: 
 {'Networking': 5, 'Cyber security': 10, 'Developer': 12, 'Administration': 8}

Как скопировать словарь в Python

Содержание

Методы

Существует шесть различных способов копирования словаря Python. Давайте посмотрим на них один за другим.

Способ 1: с помощью конструктора dict()

Конструктор dict() используется для создания словаря в Python. Здесь мы просто передадим исходный словарь в качестве аргумента конструктору dict() и сохраним значение в скопированном словаре.

В следующем примере: у нас есть сведения об инвентаре электронной коммерции. Где идентификаторы продуктов являются ключами, а количества, доступные в запасах, являются значениями.

Product_data = {
     '004592': 36,
     '004593': 58,
     '004516': 20,
     '004603': 17
}

print('The original inventory data are: \n', Product_data)

Copied_product_data = dict(Product_data)

print('The inventory data that gonna be copied is: \n', Copied_product_data)

Результат:

The original inventory data are: 
 {'004592': 36, '004593': 58, '004516': 20, '004603': 17}
The inventory data that gonna be copied is: 
 {'004592': 36, '004593': 58, '004516': 20, '004603': 17}

с помощью конструктора dict()

Метод 2: с использованием словаря

В этом методе мы будем использовать понимание словаря для создания скопированного словаря с использованием элементов исходного словаря.

В этом примере: у нас есть компания, которая поручила своим сотрудникам несколько проектов в группах. К тому времени они смогут изменить проекты, порученные сотрудникам.

Project_assigned = {
     'salesforce': ['Samy', 'abby'],
     'SAP': ['dave', 'david'],
     'Python': ['Veronica', 'joey']
}

print('Assigned project names: \n', Project_assigned)

Working_project = {key: value for key, value
                   in Project_assigned.items()}

print('Working project names: \n', Working_project)

Вывод кода:

Assigned project names: 
 {'salesforce': ['Samy', 'abby'], 'SAP': ['dave', 'david'], 'Python': ['Veronica', 'joey']}
Working project names: 
 {'salesforce': ['Samy', 'abby'], 'SAP': ['dave', 'david'], 'Python': ['Veronica', 'joey']}

с использованием словаря

Способ 3: с использованием цикла for

Цикл For в Python используется для перебора последовательности. Здесь мы пройдемся по исходному словарю с помощью цикла for и сохраним все скопированные элементы в скопированном словаре.

В примере: у нас есть подробная информация о гонщиках в США в 2023 году с именами гонщиков и установленными ими рекордами. К тому времени эти рекорды могут измениться.

Racers = {
     'Lex Hilton': '3:58.70i*',
     'Jake Gebhardt': '3:59.18i*',
     'Camden Marshall': '3:59.30i'
}

print('The top racers are: \n', Racers)

Copy_racers_data = {}

for key, value in Racers.items():
     Copy_racers_data[key] = value

print('the copies data : \n', Copy_racers_data)

Вывод этого кода:

The top racers are: 
 {'Lex Hilton': '3:58.70i*', 'Jake Gebhardt': '3:59.18i*', 'Camden Marshall': '3:59.30i'}
the copies data : 
 {'Lex Hilton': '3:58.70i*', 'Jake Gebhardt': '3:59.18i*', 'Camden Marshall': '3:59.30i'}

с использованием цикла for

Метод 4: с использованием метода copy()

Метод copy() в Python создает неполную копию словаря. Функция copy() не принимает аргументов. Здесь мы будем использовать метод copy() для копирования элементов из исходного словаря в другой словарь.

В примере у нас есть данные из библиотеки, а также название выданной книги и человек, которому книга выдана.

Library_books_week01 = {
    'Invisible Man': 'Amy',
    'Beloved': 'Cabby',
    'To Kill a Mockingbird': 'Ian'
}

print('Library books assigned: \n', Library_books_week01)

week02 = Library_books_week01.copy()
print('copied data from library:\n', week02)

Результат:

Library books assigned: 
 {'Invisible Man': 'Amy', 'Beloved': 'Cabby', 'To Kill a Mockingbird': 'Ian'}
copied data from library:
 {'Invisible Man': 'Amy', 'Beloved': 'Cabby', 'To Kill a Mockingbird': 'Ian'}

с использованием метода copy()

Способ 5: метод deepcopy()

Метод deepcopy() в Python является членом модуля копирования. Он возвращает новый словарь с скопированными элементами переданного словаря. Он копирует все элементы данного словаря рекурсивно.

В данном примере мы взяли данные велогонки. гонщикам присвоен трековый номер. Но после начала гонки велосипедист может при необходимости сменить трассу. Итак, чтобы вести учет, нам нужно изменить данные в соответствии с требованиями.

import copy

cycle_race = {
     'rake': 5,
     'dave': 1,
     'gia': 2
}
print('cyclist name with their track number: \n', cycle_race)

after_1_hour = copy.deepcopy(cycle_race)
print('cyclist after 1 hour:\n', after_1_hour)

Вывод этого блока кода:

Library books assigned: 
 {'Invisible Man': 'Amy', 'Beloved': 'Cabby', 'To Kill a Mockingbird': 'Ian'}
copied data from library:
 {'Invisible Man': 'Amy', 'Beloved': 'Cabby', 'To Kill a Mockingbird': 'Ian'}

Метод deepcopy()

Метод 6: с использованием = (Оператор присваивания)

Операторы присваивания используются для присвоения значений переменным независимо от типа или класса значения, поскольку Python является динамически типизированным языком программирования.

До сих пор мы видели методы, когда меняли или обновляли данные в скопированном словаре, и с исходным словарем ничего не происходило. Но в этом методе, если мы автоматически изменяем/обновляем скопированные данные словаря, данные изменятся в исходном/родительском словаре.

Чтобы иметь резервный словарь для любого словаря, мы должны использовать этот метод копирования словаря Python.

В этом примере мы просто используем оператор = и присваиваем исходный словарь переменной. Здесь мы поручили людям работу по дому. мы увидим, как скопировать эти данные, а также увидим, что происходит с исходным/родительским словарем Python, когда мы изменяем данные скопированного словаря.

work_assigned = {
     'Dusting': ['Samy', 'Abby'],
     'Cooking': ['Dave', 'David'],
     'Gardening': ['Veronica', 'Joey']
}
print('work assigned: \n', work_assigned)

work_going = work_assigned
print('Work going on: \n', work_going)

work_going['washing'] = ['Ian', 'Ray']
print('Updated work going on: \n', work_going)
print('Parent dictionary: \n', work_assigned)

Вывод этого блока кода:

work assigned: 
 {'Dusting': ['Samy', 'Abby'], 'Cooking': ['Dave', 'David'], 'Gardening': ['Veronica', 'Joey']}
Work going on: 
 {'Dusting': ['Samy', 'Abby'], 'Cooking': ['Dave', 'David'], 'Gardening': ['Veronica', 'Joey']}
Updated work going on: 
 {'Dusting': ['Samy', 'Abby'], 'Cooking': ['Dave', 'David'], 'Gardening': ['Veronica', 'Joey'], 'washing': ['Ian', 'Ray']}
Parent dictionary: 
 {'Dusting': ['Samy', 'Abby'], 'Cooking': ['Dave', 'David'], 'Gardening': ['Veronica', 'Joey'], 'washing': ['Ian', 'Ray']}

с использованием = (Оператор присваивания)

Заключение

В этом уроке было рассмотрено множество способов копирования словаря Python. Если нам нужна фактическая копия, мы должны сделать так, чтобы копия не влияла на исходный словарь, но если мы хотим, чтобы скопированный словарь изменился, это должны быть резервные данные для родительского словаря, пожалуйста, используйте функцию оператора =.

Добавить комментарий