Керівництво словником Python - Як переглядати, копіювати та об’єднувати словники в Python 3.9

Python - популярна мова для науки про дані. А робота з колекціями - одна з найбільш фундаментальних навичок, яку потрібно мати.

Колекції - це структури даних, які містять кілька елементів різних типів даних.

Сьогодні ми детально розглянемо словники, які є особливим типом колекції в Python. Ми розглянемо їх основні функціональні можливості, їх внутрішню роботу, а також деякі найсучасніші функції останньої версії Python.

До кінця цього підручника ви будете знати

  • Що таке словники
  • Як працювати зі словниками
  • Як переглядати словники
  • Як копіювати словники
  • Як об’єднати словники в Python 3.9

Що таке словники на Python?

Перш ніж глибоко дізнатись про щось, завжди добре почати з простого та базового визначення.

Як я вже говорив, словники - це тип колекції в Python. Однак, на відміну від списків, кортежів і наборів, ви зберігаєте не окремі значення, а так звані пари ключ-значення . Це означає, що замість посилання на свої значення за допомогою індексу ви використовуєте ключ, який є унікальним ідентифікатором.

l1 = [10, "Hello", True, 20.23] # List t1 = (10, "Hello", True, 20.23) # Tuple s1 = {10, "Hello", True, 20.23} # Set d1 = {'number': 10, 'greeting': "Hello", 'boolean': True, 'float': 20.23} # Dictionary 

У наведеному вище прикладі ви бачите різницю. Окремі пари ключ-значення розділяються комами. Кожна пара починається з унікального ключа, за яким ставиться двокрапка та відповідне значення. Зверніть увагу, що значення не повинно бути унікальним, оскільки ми не використовуємо його для доступу чи ідентифікації чого-небудь.

Також майте на увазі, що ми можемо використовувати будь-який тип даних для потрібних ключів і значень. Тут ми використовуємо лише рядки для ідентифікаторів, але ми також можемо використовувати цілі числа, плаваючі, колекції або навіть логічні значення.

Однак ви завжди повинні запитати себе, наскільки це розумно. Найчастіше струна буде найкращим вибором.

Як працювати зі словниками на Python

Добре, тепер, коли ми знаємо, що таке словники, давайте подивимось, як з ними працювати.

Спочатку ми пройдемо через основні операції, такі як доступ, додавання та видалення значень. Після цього ми розглянемо деякі більш просунуті та цікавіші теми.

Ви можете отримати доступ до елементів словника на Python так само, як і до елементів з будь-якої іншої колекції. Єдина різниця полягає в тому, що ви передаєте ключ, а не індекс. Це також стосується змін і навіть додавання значень.

person = {'name': "Mike", 'age': 25, 'weight': 80.5} print(person['name']) person['name'] = "Bob" # Changing existing value print(person['name']) person['gender'] = 'm' # Creating new key-value pair print(person['gender']) 

Як ви можете бачити тут, ви просто передаєте ключ для доступу до значення, на яке воно посилається. Спочатку ви друкуєте ім'я, а потім змінюєте його. Потім ви друкуєте його ще раз, щоб переконатися, що зміни були внесені.

Зверніть увагу, що це працює не тільки для вже існуючих пар, але і для нових. Для того, щоб створити нову пару ключ-значення, просто зверніться до ключа, який ще не існує, і призначте йому значення. Потім пара автоматично додається до словника.

Видалення значень зі словника працює по-іншому. Тут ви можете використовувати делключове слово або метод pop () .

Основна різниця між цими двома підходами полягає в тому, що del лише видаляє пару ключ-значення, тоді як pop () також повертає видалене значення згодом. Залежно від вашої ситуації використання, вам доведеться вирішити, який метод більше відповідає вашим завданням.

Як переглядати словники в Python

Оскільки словники є колекціями, ви також можете переглядати їх. Але це не так просто і просто, як з іншими типами колекцій.

Це тому, що ви маєте справу не з окремими цінностями, а з парами. Коли ви перебираєте словник, використовуючи цикл for, ви насправді просто перебираєте ключі.

names_ages = {'Bob': 50, 'Anna': 28, 'Max': 30, 'John': 76} for element in names_ages: print(element) # Output: Bob Anna Max John 

Тому, якщо ви хочете переглядати значення або навіть цілі пари, вам потрібно використовувати додаткові методи.

Щоб отримати доступ до значень, вам просто потрібно викликати values ​​()метод. Він повертає ітератор для всіх значень словника.

Щоб отримати доступ до повних пар, ви можете зателефонувати до пунктів ()метод. Тут ви переглядаєте список кортежів, де кожен кортеж представляє одну пару ключ-значення.

Звичайно, існує також метод keys () , якщо ви хочете працювати з ключами словника за межами циклу for.

print(list(names_ages.keys())) print(list(names_ages.values())) print(list(names_ages.items())) # Output # > ['Bob', 'Anna', 'Max', 'John'] # > [50, 28, 30, 76] # > [('Bob', 50), ('Anna', 28), ('Max', 30), ('John', 76)] 

Тут слід пам’ятати одне важливе, що ці методи не повертають фактичних списків. Вони повертають об'єкти, які ви можете використовувати для перегляду ключів та значень. Але ви можете легко ввести ці об'єкти у списки за допомогою list ()функція.

Як копіювати словники на Python

Зараз ми вникаємо в деякі більш просунуті речі.

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

Тож зверніть увагу тут, якщо ви не хочете самі відчувати це розчарування.

Перш ніж ми поговоримо про копіювання колекцій та словників, давайте розглянемо, як ви зазвичай копіюєте примітивні типи даних, такі як цілі числа.

i1 = 20 i2 = i1 i2 += 10 print(i1, i2) # Output: 20 30 

Коли ви хочете створити нову змінну і скопіювати в неї значення іншого цілого числа, ви просто призначаєте змінну. Тоді ви можете змінити значення другого цілого числа і працювати з ним, нічого не змінюючи щодо першого.

Це також працює для Booleans, Floats, Strings тощо. Однак давайте подивимося, що трапиться, коли ми робимо це за допомогою словника.

d1 = {'a': 10, 'b': 20, 'c': 30} d2 = d1 d2['c'] = 50 print(d1) print(d2) # Output # {'a': 10, 'b': 20, 'c': 50} # {'a': 10, 'b': 20, 'c': 50} 

What happened here? Didn’t we do the same thing as before? Why does the first dictionary change, when we modify the second one? Isn’t it just a copy?

The answer is a clear no. When you assign a dictionary to a new variable, you are actually passing a so-called reference.

The second variable is not actually a dictionary but just another variable pointing to the same dictionary as the first one. Therefore, it doesn’t matter on which variable you apply changes, since they are all performed on the one dictionary they both are referring to.

If you want to create an actual shallow copy of a dictionary in Python, you need to either use the dict()function or call the copy() method of the dictionary. By doing that you create a new dictionary that has the same elements as the original.

d1 = {'a': 10, 'b': 20, 'c': 30} d2 = dict(d1) d3 = d1.copy() d2['b'] = 50 d3['a'] = -90 print(d1) # unchanged 

Notice, however, that the objects inside the copy are still the exact same objects as in the first dictionary. Therefore, if they are more complex objects or collections, you will end up with a new separate dictionary (but the objects inside it will refer to the same objects as those in the first dictionary).

In order to change that, you would have to make a so-called deep copy, but this is not in the scope of this article.

How to Merge Dictionaries in Python

Last but not least, let's talk about the cutting-edge dictionary features of Python 3.9. These features are focused on merging dictionaries.

Up until recently, programmers had to either use the update() method or make use of the unpacking operators.

d1 = {'a': 10, 'b': 20, 'c': 30} d2 = {'c': 40, 'd': 60, 'e': 20} d1.update(d2) print(d1) d1 = {'a': 10, 'b': 20, 'c': 30} d3 = {**d1, **d2} print(d3) 

The main difference between those two approaches is that the update() method adds the values of one dictionary to another and applies the changes directly. The resulting dictionary is not returned but actually saved into the first object.

When you use the unpacking operators, on the other hand, you create a new dictionary and put the key-value pairs of the two dictionaries into it by unpacking them.

Now you may be asking yourself what happens when you merge two dictionaries that have the same key inside them.

You can think of that like this: The first dictionary creates the key-value pair and the second one overwrites it. So if you call the update method on the first collection and pass the second collection as an argument, the key-value pair of the second dictionary will end up in the result.

The same goes for the unpacking. Whichever dictionary you pass last overwrites the previous ones.

So this is the old way of doing things. In Python 3.9, however, the merging and updating operators were introduced. They make joining dictionaries simpler.

d1 = {'a': 10, 'b': 20, 'c': 30} d2 = {'c': 40, 'd': 60, 'e': 20} d3 = d1 | d2 # Merging d1 |= d2 # Updating 

As you can see, the operator for merging is the same one that's used for the bitwise OR operation. The order of the dictionaries is important if you have identical keys in both dictionaries. The collection on the right overwrites the collection on the left.

If you want to update the first dictionary instead of returning a new one, just combine the merging operator with the basic assignment operator. This way of merging dictionaries is the recommended method since Python 3.9.

If you are more of a visual or auditory learner, you can watch my video tutorial on merging dictionaries below.

Wrapping Up

Alright, so you should now be very comfortable when working with dictionaries. You not only know what they are and how to use them but you also understand how they work on a deeper level.

When working on a project, you will know how to copy dictionaries the right way. We even covered one of the cutting-edge features of the latest Python version.

Make sure you go through the code snippets once again and understand how and why they work. This will make you a much better Python programmer.

If you are interested in more content like this, you can check out my YouTube channel NeuralNine or my website neuralnine.com.

For Python enthusiasts I have a special Python book series that teaches you the language from scratch and also goes into more advanced topics like machine learning and computer vision. You can find it here.

I hope you enjoyed this article and I wish you a great day! :)