Introductie
Een woordenboek in Python is een verzameling items waarin gegevens worden opgeslagen als sleutel-waardeparen. In Python 3.7 en latere versies worden woordenboeken gesorteerd op volgorde van invoeging van items. In eerdere versies waren ze ongeordend.
In dit artikel bekijken we hoe we een woordenboek kunnen sorteren op basis van de waarden die ze bevatten.
Woordenboek sorteren met a For Ringleiding
We kunnen een woordenboek sorteren met behulp van a for
lus. Eerst gebruiken we de sorted()
functie om de waarden van het woordenboek te ordenen. We doorlopen vervolgens de gesorteerde waarden en vinden de sleutels voor elke waarde. We voegen deze sleutel-waardeparen in de gesorteerde volgorde toe aan een nieuw woordenboek.
Opmerking: Door te sorteren kunt u het woordenboek niet opnieuw ordenen. We schrijven de geordende paren in een volledig nieuw, leeg woordenboek.
dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values())
sorted_dict = {}
for i in sorted_values:
for k in dict1.keys():
if dict1[k] == i:
sorted_dict[k] = dict1[k]
print(sorted_dict)
Als u dit uitvoert met de Python-interpreter, ziet u:
{1: 1, 3: 4, 2: 9}
Nu we hebben gezien hoe te sorteren met lussen, laten we eens kijken naar een populairder alternatief dat gebruik maakt van de sorted()
functie.
Woordenboek sorteren met de gesorteerd() Functie
We gebruikten eerder de sorted()
functie om de waarden van een array te sorteren. Bij het sorteren van een woordenboek kunnen we nog een argument doorgeven aan de sorted()
functioneren als volgt: sorted(dict1, key=dict1.get)
.
Hier key
is een functie die op elk element wordt aangeroepen voordat de waarden worden vergeleken om te sorteren. De get()
methode op woordenboekobjecten retourneert de waarde van de sleutel van een woordenboek.
De sorted(dict1, key=dict1.get)
expression retourneert de lijst met sleutels waarvan de waarden in volgorde zijn gesorteerd. Van daaruit kunnen we een nieuw, gesorteerd woordenboek maken:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)
for w in sorted_keys:
sorted_dict[w] = dict1[w]
print(sorted_dict)
De sorted()
functie heeft de hoeveelheid code verminderd die we moesten schrijven bij gebruik for
lussen. We kunnen de echter verder combineren sorted()
functie met de itemgetter()
functie voor een meer beknopte oplossing voor het sorteren van woordenboeken op waarden.
Woordenboek sorteren met de operator Module en itemgetter()
De operator
module bevat de itemgetter()
functie. Deze functie retourneert een aanroepbaar object dat een item van een object retourneert.
Laten we bijvoorbeeld itemgetter()
om een โโoproepbaar object te maken dat de waarde van een woordenboek retourneert met een sleutel die is 2
:
import operator
dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)
print(get_item_with_key_2(dict1))
Elk woordenboek heeft toegang tot de items()
methode. Deze functie retourneert de sleutel-waardeparen van een woordenboek als een lijst met tupels. We kunnen de lijst met tupels sorteren met behulp van de itemgetter()
functie om de tweede waarde van de tuple op te halen, dwz de waarde van de sleutels in het woordenboek.
Zodra het is gesorteerd, kunnen we een woordenboek maken op basis van die waarden:
import operator
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
Met veel minder moeite hebben we een woordenboek gesorteerd op waarden!
Aangezien de key
argument accepteert elke functie, we kunnen lambda-functies gebruiken om woordenboekwaarden te retourneren, zodat ze kunnen worden gesorteerd. Laten we eens kijken hoe.
Woordenboek sorteren met een Lambda-functie
Lambda-functies zijn anonieme of naamloze functies in Python. We kunnen lambda-functies gebruiken om de waarde van een woordenboekitem te krijgen zonder de . te hoeven importeren operator
module voor itemgetter()
. Als je meer wilt weten over lambda's, kun je erover lezen in onze gids voor: Lambda-functies in Python.
Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!
Laten we een woordenboek sorteren op waarden met behulp van een lambda-functie in de key
argument van sorted()
:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
Merk op dat de methoden die we tot nu toe hebben besproken alleen werken met Python 3.7 en hoger. Laten we eens kijken wat we kunnen doen voor eerdere versies van Python.
Een nieuw woordenboek met gesorteerde waarden retourneren
Na het sorteren van een woordenboek op waarden, om een โโgesorteerd woordenboek in Python-versies vรณรณr 3.7 te behouden, moet je de . gebruiken OrderedDict
โ verkrijgbaar in de collections
module. Deze objecten zijn woordenboeken die de volgorde van invoegen behouden.
Hier is een voorbeeld van sorteren en gebruiken OrderedDict
:
import operator
from collections import OrderedDict
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = OrderedDict()
for k, v in sorted_tuples:
sorted_dict[k] = v
print(sorted_dict)
Conclusie
Deze tutorial liet zien hoe een woordenboek kan worden gesorteerd op basis van zijn waarden. We hebben eerst een woordenboek gesorteerd met twee for-lussen. Vervolgens hebben we onze sortering verbeterd met behulp van de sorted()
functie. We hebben ook gezien de itemgetter()
functie van de operator
module kan onze oplossing beknopter maken.
Ten slotte hebben we onze oplossing aangepast om te werken op Python-versies lager dan 3.7.
variaties van de sorted()
functie zijn de meest populaire en betrouwbare om een โโwoordenboek op waarden te sorteren.