Tot nu toe hebben we op meerdere manieren manieren gezien om een woordenboek te maken en verschillende bewerkingen op de sleutel en waarden in Python woordenboek . Laten we nu eens kijken naar verschillende manieren om een woordenboek met lijsten te maken. Merk op dat de beperking met sleutels in de Python woordenboek is alleen onveranderlijk, gegevenstypen kunnen als sleutels worden gebruikt, wat betekent dat we een woordenboek met lijsten niet als sleutel kunnen gebruiken.
Voorbeeld :
Input: myDict = {} myDict['key1'] = [1, 2] # Adding list as value myDict['key2'] = ['Geeks', 'For', 'Geeks'] Output: {'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]} Explanation: In the output, we have a dictionary of lists.> Probleemstelling
Meestal krijgen we de typfout als we het op de normale manier proberen te implementeren.
Python3
# Creating a dictionary> myDict>=> {[>1>,>2>]:>'Geeks'>}> print>(myDict)> |
alfabet met cijfers
>
>
Uitgang:
TypeError: unhashable type: 'list'>
Maar hetzelfde kan heel verstandig worden gedaan met waarden in een woordenboek. Laten we eens kijken naar alle verschillende manieren waarop we een woordenboek met lijsten kunnen maken.
Manieren om een woordenboek met lijsten te maken
Hieronder staan de onderwerpen die we in dit artikel zullen behandelen:
- Gebruik makend van onderschrift
- De ... gebruiken append() methode
- De ... gebruiken setdefault() methode
- Gebruik makend van lijst begrip
- Gebruik makend van wanbetaling
- Gebruik makend van Json.dmb() methode
- Gebruik makend van itertools-module
Maak een woordenboek met lijsten met behulp van subscript
Deze code initialiseert een leeg woordenboek myDict>. Vervolgens worden twee sleutel-waardeparen aan het woordenboek toegevoegd:'key1'>met de waarde[1, 2]>, En'key2'>met de waarde['Geeks', 'For', 'Geeks']>. Ten slotte drukt de code de inhoud van het woordenboek af.
Python3
# Creating an empty dictionary> myDict>=> {}> # Adding list as value> myDict[>'key1'>]>=> [>1>,>2>]> myDict[>'key2'>]>=> [>'Geeks'>,>'For'>,>'Geeks'>]> print>(myDict)> |
>
>
Uitgang:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]}> Tijdcomplexiteit: O(1) voor elke woordenboekinvoeging en afdrukken van het woordenboek.
Hulpruimte: O(n), waarbij n het totale aantal elementen in het woordenboek is.
Maak een woordenboek met lijsten met behulp van de methode append().
Geneste lijst toevoegen als waarde met behulp van de append() methode. Maak een nieuwe lijst en we kunnen die lijst eenvoudig aan de waarde toevoegen.
Python3
# Creating an empty dictionary> myDict>=> {}> # Adding list as value> myDict[>'key1'>]>=> [>1>,>2>]> # creating a list> lst>=> [>'Geeks'>,>'For'>,>'Geeks'>]> # Adding this list as sublist in myDict> myDict[>'key1'>].append(lst)> print>(myDict)> |
>
>
Uitgang:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]}> Tijdcomplexiteit: O(1).
Complexiteit van de hulpruimte: Op).
Maak een woordenboek met lijsten met behulp van de setdefault()-methode
Herhaal de lijst en blijf de elementen toevoegen tot het opgegeven bereik met behulp van de setdefault() methode.
Python3
# Creating an empty dict> myDict>=> dict>()> # Creating a list> valList>=> [>'1'>,>'2'>,>'3'>]> # Iterating the elements in list> for> val>in> valList:> >for> ele>in> range>(>int>(val),>int>(val)>+> 2>):> >myDict.setdefault(ele, []).append(val)> print>(myDict)> |
ambtstermijn berekenen in Excel
>
>
Uitgang:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']}> Tijdcomplexiteit: O(n^2)
Complexiteit van de ruimte: Op)
Een woordenboek met lijsten maken met behulp van Lijstbegrip
In lijst begrip we herhalen de waarden'1'>,'2'>, En'3'>, en voor elke waarde wordt een sleutel-waardepaar in het woordenboek gemaakt. De sleutel is de huidige waarde en de waarde is een reeks gehele getallen, beginnend bij de waarde die is omgezet in een geheel getal en eindigt bij de waarde plus 1.
Python
# Creating a dictionary of lists using list comprehension> d>=> dict>((val,>range>(>int>(val),>int>(val)>+> 2>))> >for> val>in> [>'1'>,>'2'>,>'3'>])> print>(d)> |
>
>
Uitgang:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]}> Tijdcomplexiteit: O(1).
Complexiteit van de hulpruimte: Op).
Een woordenboek met lijsten maken met behulp van defaultdict
Importeer de wanbetaling klasse uit de collectiemodule. Definieer een lijst met tupels lst, waarbij elke tupel een sleutelwaardepaar bevat. Maak een defaultdict-object met de naam orDict dat standaardwaarden van een lege lijst zal hebben. Herhaal de lijst met tupels lst met behulp van een for-lus en pak elke tupel uit in de sleutel- en val-variabelen. Voeg de waarde val toe aan de lijst die bij de sleutel hoort in het orDict-woordenboek.
Druk het resulterende of Dict-woordenboek af.
Opmerking : Hetzelfde kan ook worden gedaan met een eenvoudig woordenboek, maar het gebruik van defaultdict is in dergelijke gevallen efficiënter.
Python3
from> collections>import> defaultdict> lst>=> [(>'Geeks'>,>1>), (>'For'>,>2>), (>'Geeks'>,>3>)]> orDict>=> defaultdict(>list>)> # iterating over list of tuples> for> key, val>in> lst:> >orDict[key].append(val)> print>(orDict)> |
>
>
Uitgang:
defaultdict(, {'For': [2], 'Geeks': [1, 3]})> Tijdcomplexiteit: O(n).
Hulpruimte: O(n).
Merk op dat er slechts twee sleutelwaardeparen in het uitvoerwoordenboek zijn, maar dat de invoerlijst drie tupels bevat. Het eerste element (d.w.z. sleutel) is hetzelfde voor de eerste en derde tupels en twee sleutels kunnen nooit hetzelfde zijn.
Een woordenboek met lijsten maken met Json
Door het importeren van dejson>module. Het initialiseert een lijstlst>tupels bevatten. Dan een leeg woordenboekdict>wordt geïnitialiseerd. De code converteert de lijstlst>in een JSON-geformatteerde tekenreeks gebruik makend vanjson.dumps()> en wijst deze string toe als sleutel in het woordenboekdict>waarbij de waarde is omgezet. Ten slotte wordt het woordenboek afgedrukt.
Python3
#importing json> import> json> #Initialisation of list> lst>=> [(>'Geeks'>,>1>), (>'For'>,>2>), (>'Geeks'>,>3>)]> #Initialisation of dictionary> dict> => {}> #using json.dump()> hash> => json.dumps(lst)> #creating a hash> dict>[>hash>]>=> 'converted'> #Printing dictionary> print>(>dict>)> |
>
>
alfabet nummer
Uitgang:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'}> Tijdcomplexiteit: O(n), waarbij n de lengte van de lijst lst is.
Hulpruimte: O(n), waarbij n de lengte van de lijst lst is.
Een woordenboek met lijsten maken met behulp van itertools
Eén benadering is om de functie zip_longest uit de itertools-module. Met deze functie kunt u parallel twee of meer iterabelen doorlopen, waarbij ontbrekende elementen met een opgegeven vulwaarde worden ingevuld.
Python3
from> itertools>import> zip_longest> # Initialize the lists> list1>=> [>1>,>2>,>3>]> list2>=> [>10>,>20>,>30>,>40>]> list3>=> [>'a'>,>'b'>,>'c'>,>'d'>,>'e'>]> # Use zip_longest to iterate over the lists in parallel> d>=> {}> for> elem1, elem2, elem3>in> zip_longest(list1, list2, list3, fillvalue>=>0>):> >d.setdefault(elem1, []).append(elem2)> >d.setdefault(elem1, []).append(elem3)> print>(d)> # Output: {1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd']}> |
>
>Uitvoer
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']}> Tijdcomplexiteit: O(n), waarbij n de lengte van de langste lijst is.
Hulpruimte: Op)