logo

Python | Sorteer een woordenboek

Python, Gegeven een woordenboek, voer sortering uit, gebaseerd op sleutels of waarden. [toepasbare Python>=3.6v].

Invoer : test_dict = {Gfg: 5, is: 7, Beste: 2} Uitvoer : {‘Beste’: 2, ‘Gfg’: 5, ‘is’: 7}, {‘is’: 7, ‘Gfg’: 5, ‘Beste’: 2} Uitleg : Gesorteerd op sleutel, in oplopende en omgekeerde volgorde. Invoer : test_dict = {Beste: 2, voor: 9, nerds: 8} Uitvoer : {‘Beste’: 2, ‘Gfg’: 5, ‘voor’: 9}, {‘voor’: 9, ‘geeks’: 8, ‘Beste’: 2} Uitleg : Gesorteerd op waarden, in oplopende en omgekeerde volgorde.



Geval 1: Sorteren op sleutels

Deze taak wordt uitgevoerd met behulp van sort(), waarbij we de sleutels extraheren met behulp van de eerste index van items uit het woordenboek die zijn geëxtraheerd door items(), en deze in de sleutel doorgeven als aangepaste lambda-functie om gesorteerd te worden op sleutels. De reverse=True wordt toegevoegd om omgekeerde sortering uit te voeren.

Python3








# Python3 code to demonstrate working of> # Sort a Dictionary> # Sort by Keys> # initializing dictionary> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> # printing original dictionary> print>(>'The original dictionary is : '> +> str>(test_dict))> # using items() to get all items> # lambda function is passed in key to perform sort by key> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>0>])}> # printing result> print>(>'Result dictionary sorted by keys : '> +> str>(res))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # adding 'reversed = True' for reversed order> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>0>], reverse>=> True>)}> # printing result> print>(>'Result dictionary sorted by keys ( in reversed order ) : '> +> str>(res))>

>

>

Uitvoer

The original dictionary is : {'Gfg': 5, 'is': 7, 'Best': 2, 'for': 9, 'geeks': 8} Result dictionary sorted by keys : {'Best': 2, 'Gfg': 5, 'for': 9, 'geeks': 8, 'is': 7} Result dictionary sorted by keys ( in reversed order ) : {'is': 7, 'geeks': 8, 'for': 9, 'Gfg': 5, 'Best': 2}>

Geval 2: Sorteer op waarden

Deze taak kan op dezelfde manier worden uitgevoerd als hierboven, met als enige verschil dat voor het extraheren van waarden het tweede element van items() wordt doorgegeven als comparator.

Python3




# Python3 code to demonstrate working of> # Sort a Dictionary> # Sort by Values> # initializing dictionary> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> # printing original dictionary> print>(>'The original dictionary is : '> +> str>(test_dict))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # passing 2nd element of items()> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>1>])}> # printing result> print>(>'Result dictionary sorted by values : '> +> str>(res))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # passing 2nd element of items()> # adding 'reversed = True' for reversed order> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>1>], reverse>=> True>)}> # printing result> print>(>'Result dictionary sorted by values ( in reversed order ) : '> +> str>(res))>

>

>

Uitvoer

The original dictionary is : {'Gfg': 5, 'is': 7, 'Best': 2, 'for': 9, 'geeks': 8} Result dictionary sorted by values : {'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} Result dictionary sorted by values ( in reversed order ) : {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>

Methode #3: Collections.OrderedDict() en sorted() gebruiken

Benadering

deze aanpak gebruikt de functie sort() om een ​​woordenboek te sorteren op zijn waarden in oplopende of aflopende volgorde. De functie sort() wordt aangeroepen met de methode items() van het woordenboek en een sleutelfunctie die het tweede element van elke tuple (dat wil zeggen de waarden) of hun ontkenning retourneert. De resulterende lijst met tupels wordt doorgegeven aan de constructor OrderedDict() om een ​​nieuw geordend woordenboek te maken met dezelfde sleutel-waardeparen als het oorspronkelijke woordenboek, maar gesorteerd op waarde.

Algoritme

1. Roep de functie sort() in het woordenboek ‘test_dict’ aan en geef een lambda-functie door als het ‘sleutel’-argument.
2. De lambda-functie neemt elk sleutel-waardepaar als invoer en retourneert de sleutel of waarde waarop moet worden gesorteerd, afhankelijk van de gewenste volgorde.
3. Gebruik de functie sort() om een ​​lijst met gesorteerde sleutel-waardeparen te retourneren.
4. Geef de gesorteerde lijst door aan de constructor OrderedDict() om een ​​nieuw geordend woordenboek te maken.
5. Geef het bestelde woordenboek terug.

Python3




from> collections>import> OrderedDict> from> operator>import> itemgetter> def> sort_dict_by_value(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>itemgetter(>1>))> >return> OrderedDict(sorted_list)> def> sort_dict_by_value_reverse(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>itemgetter(>1>), reverse>=>True>)> >return> OrderedDict(sorted_list)> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> print>(sort_dict_by_value(test_dict))> print>(sort_dict_by_value_reverse(test_dict))>

>

>

Uitvoer

OrderedDict([('Best', 2), ('Gfg', 5), ('is', 7), ('geeks', 8), ('for', 9)]) OrderedDict([('for', 9), ('geeks', 8), ('is', 7), ('Gfg', 5), ('Best', 2)])>

Tijdcomplexiteit: O(N log N), waarbij N het aantal sleutelwaardeparen in het woordenboek is.
Ruimtecomplexiteit: O(N), omdat we een nieuw geordend woordenboek maken om de gesorteerde sleutel-waardeparen op te slaan.

Methode 4: gebruik de sort()-methode met een lambda-functie als sleutelparameter.

Hier zijn de stappen:

  1. Definieer het woordenboek dat moet worden gesorteerd.
  2. Gebruik de methode sort() om het woordenboek op waarden te sorteren.
  3. Geef een lambda-functie door als sleutelparameter aan de sorteermethode () om op te geven dat er op waarden moet worden gesorteerd.
  4. Gebruik de constructor dict() om een ​​nieuw woordenboek te maken op basis van de gesorteerde lijst met tupels.

Python3


voor loop bash



def> sort_dict_by_value_lambda(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>lambda> x: x[>1>])> >return> dict>(sorted_list)> def> sort_dict_by_value_lambda_reverse(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>lambda> x: x[>1>], reverse>=>True>)> >return> dict>(sorted_list)> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> print>(sort_dict_by_value_lambda(test_dict))> print>(sort_dict_by_value_lambda_reverse(test_dict))>

>

>

Uitvoer

{'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>

Tijdscomplexiteit: O(n log n) waarbij n het aantal items in het woordenboek is.

Hulpruimte: O(n) om de gesorteerde lijst met tupels op te slaan. De constructor dict() heeft O(n) tijd nodig om een ​​nieuw woordenboek uit de gesorteerde lijst te maken.