Python Dictionary Guide - Sådan gentages, kopieres og flettes ordbøger i Python 3.9

Python er et populært sprog for datalogi. Og at arbejde med samlinger er en af ​​de mest grundlæggende færdigheder, du har brug for.

Samlinger er datastrukturer, der indeholder flere elementer af forskellige datatyper.

I dag skal vi se nærmere på ordbøger, som er en særlig type samling i Python. Vi vil dække deres grundlæggende funktionalitet, deres indre funktion og også nogle banebrydende funktioner i den nyeste Python-version.

Ved afslutningen af ​​denne vejledning ved du det

  • Hvad ordbøger er
  • Sådan arbejder du med ordbøger
  • Sådan gentages ordbøger
  • Sådan kopieres ordbøger
  • Sådan flettes ordbøger i Python 3.9

Hvad er ordbøger i Python?

Før du lærer noget dybtgående, er det altid godt at starte med en enkel og grundlæggende definition.

Som jeg allerede har sagt, er ordbøger en type samling i Python. I modsætning til lister, tupler og sæt gemmer du dog ikke individuelle værdier, men såkaldte nøgleværdipar . Dette betyder, at du i stedet for at henvise til dine værdier gennem et indeks bruger en nøgle, som er en unik identifikator.

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 

I eksemplet ovenfor kan du se forskellen. De enkelte nøgleværdipar adskilles med kommaer. Hvert par starter med en unik nøgle efterfulgt af et kolon og den respektive værdi. Bemærk, at værdien ikke behøver at være unik, da vi ikke bruger den til at få adgang til eller identificere noget.

Husk også, at vi kan bruge enhver datatype til de nøgler og værdier, vi ønsker. Her bruger vi kun strenge til identifikatorerne, men vi kan også bruge heltal, flyder, samlinger eller endda booleanske.

Du skal dog altid spørge dig selv, hvor rimeligt dette er. Det meste af tiden vil en streng være det bedste valg.

Sådan arbejder du med ordbøger i Python

Okay, nu hvor vi ved, hvad ordbøger er, lad os se på, hvordan vi kan arbejde med dem.

For det første vil vi gennemgå de grundlæggende operationer som at få adgang til, tilføje og fjerne værdier. Derefter vil vi se på nogle mere avancerede og mere interessante emner.

Du kan få adgang til elementer i en ordbog i Python på samme måde som du får adgang til elementer fra enhver anden samling. Den eneste forskel er, at du sender en nøgle snarere end et indeks. Dette gælder også for at ændre og endda til at tilføje værdier.

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']) 

Som du kan se her, sender du bare en nøgle for at få adgang til den værdi, den refererer til. Først udskriver du navnet, derefter ændrer du det. Derefter udskriver du det igen for at sikre, at ændringerne blev foretaget.

Bemærk, at dette ikke kun fungerer for allerede eksisterende par, men også for nye. For at oprette et nyt nøgleværdipar skal du bare henvise til en nøgle, der endnu ikke findes, og tildele en værdi til den. Parret føjes derefter automatisk til ordbogen.

Fjernelse af værdier fra en ordbog fungerer forskelligt. Her kan du enten bruge delnøgleord eller pop () -metoden.

Hovedforskellen mellem disse to tilgange er, at del kun fjerner nøgleværdipar, mens pop () også returnerer den fjernede værdi bagefter. Afhængigt af din brugstilfælde bliver du nødt til at beslutte, hvilken metode der passer bedre til din opgave.

Sådan gentages ordbøger i Python

Da ordbøger er samlinger, kan du også gentage dem. Men dette er ikke så simpelt og ligetil som det er med de andre samlingstyper.

Dette skyldes, at du ikke har at gøre med individuelle værdier, men med par. Når du gentager en ordbog ved hjælp af en for-loop, gentager du faktisk bare over tasterne.

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

Derfor, hvis du vil gentage værdierne eller endda hele parene, skal du bruge yderligere metoder.

For at få adgang til værdierne skal du bare ringe til værdierne ()metode. Det returnerer en iterator for alle værdierne i ordbogen.

For at få adgang til de fulde par kan du ringe til emnerne ()metode. Her gentages en liste over tupler, hvor hver tuple repræsenterer et nøgleværdipar.

Selvfølgelig er der også tasterne () , hvis du vil arbejde med ordbogstasterne uden for en for-loop.

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)] 

En vigtig ting at huske på her er, at disse metoder ikke returnerer faktiske lister. De returnerer objekter, som du kan bruge til at gentage nøglerne og værdierne. Men du kan nemt indtaste disse objekter i lister ved hjælp af listen ()fungere.

Sådan kopieres ordbøger i Python

Nu går vi ind i nogle mere avancerede ting.

Du ville ikke tro, hvor mange gange nye og uerfarne programmører støder på problemer, fordi de kopierer samlinger på den forkerte måde. De foretager fejlfinding af deres projekter i timevis og kan ikke finde problemet.

Så vær opmærksom her, hvis du ikke selv vil opleve den frustration.

Før vi taler om kopiering af samlinger og ordbøger, lad os se på, hvordan du normalt kopierer primitive datatyper som heltal.

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

Når du vil oprette en ny variabel og kopiere værdien af ​​et andet heltal til den, tildeler du bare variablen direkte. Derefter kan du ændre værdien af ​​det andet heltal og arbejde med det uden at ændre noget ved det første.

Dette fungerer også for booleanere, flyder, strenge osv. Lad os dog se, hvad der sker, når vi gør dette med en ordbog.

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} 

Hvad skete der her? Gjorde vi ikke det samme som før? Hvorfor ændres den første ordbog, når vi ændrer den anden? Er det ikke bare en kopi?

Svaret er et klart nej. Når du tildeler en ordbog til en ny variabel, sender du faktisk en såkaldt reference .

Den anden variabel er faktisk ikke en ordbog, men bare en anden variabel, der peger på den samme ordbog som den første. Derfor betyder det ikke noget, hvilken variabel du anvender ændringer, da de alle udføres på den ene ordbog, som de begge henviser til.

Hvis du vil oprette en egentlig lav kopi af en ordbog i Python, skal du enten bruge 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.

Hvis du er interesseret i mere indhold som dette, kan du tjekke min YouTube-kanal NeuralNine eller min hjemmeside neuralnine.com.

For Python-entusiaster har jeg en speciel Python-bogserie, der lærer dig sproget fra bunden og også går ind på mere avancerede emner som maskinindlæring og computersyn. Du kan finde det her.

Jeg håber du nød denne artikel, og jeg ønsker dig en dejlig dag! :)