logo

Python | Måder at oprette en ordbog over lister

Indtil nu har vi set måder at oprette en ordbog på på flere måder og forskellige operationer på nøglen og værdierne i Python ordbog . Lad os nu se forskellige måder at oprette en ordbog over lister på. Bemærk, at begrænsningen med nøgler i Python ordbog er kun uforanderlige datatyper kan bruges som nøgler, hvilket betyder at vi ikke kan bruge en ordbog over lister som nøgle.

Eksempel :



  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.>

Problemformulering

Vi fik generelt typrorfejlen, hvis vi forsøger at implementere den på normal vis.

Python3








# Creating a dictionary> myDict>=> {[>1>,>2>]:>'Geeks'>}> print>(myDict)>

>

>

Produktion:

TypeError: unhashable type: 'list'>

Men det samme kan gøres meget klogt med værdier i en ordbog. Lad os se alle de forskellige måder, vi kan oprette en ordbog over lister på.

Måder at oprette en ordbog over lister

Nedenfor er de emner, som vi vil dække i denne artikel:

typer netværk

Opret en ordbog over lister ved hjælp af subscript

Denne kode initialiserer en tom ordbog myDict>. Det tilføjer derefter to nøgleværdi-par til ordbogen:'key1'>med værdien[1, 2]>, og'key2'>med værdien['Geeks', 'For', 'Geeks']>. Til sidst udskriver koden indholdet af ordbogen.

Python3




# Creating an empty dictionary> myDict>=> {}> # Adding list as value> myDict[>'key1'>]>=> [>1>,>2>]> myDict[>'key2'>]>=> [>'Geeks'>,>'For'>,>'Geeks'>]> print>(myDict)>

>

>

Produktion:

{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]}>

Tidskompleksitet: O(1) for hver ordbogsindsættelse og udskrivning af ordbogen.
Hjælpeplads: O(n), hvor n er det samlede antal elementer i ordbogen.

Opret en ordbog over lister ved hjælp af append()-metoden

Tilføjelse af indlejret liste som en værdi ved hjælp af append() metode. Opret en ny liste, og vi kan blot tilføje den liste til værdien.

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

>

>

Produktion:

{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]}>

Tidskompleksitet: O(1).
Hjælperums kompleksitet: På).

Opret en ordbog over lister ved hjælp af setdefault()-metoden

Gentag listen og fortsæt med at tilføje elementerne indtil det givne område ved hjælp af setdefault() metode.

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

>

>

Produktion:

{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']}>

Tidskompleksitet: O(n^2)
Rumkompleksitet: På)

Oprettelse af ordbog over lister ved hjælp af listeforståelse

I listeforståelse vi itererer over værdierne'1'>,'2'>, og'3'>, og for hver værdi opretter den et nøgle-værdi-par i ordbogen. Nøglen er den aktuelle værdi, og værdien er et område af heltal, der starter fra værdien konverteret til et heltal og slutter ved værdien 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)>

>

>

Produktion:

{'1': [1, 2], '3': [3, 4], '2': [2, 3]}>

Tidskompleksitet: O(1).
Hjælperums kompleksitet: På).

Oprettelse af ordbog over lister ved hjælp af defaultdict

Importer defaultdict klasse fra samlingsmodulet. Definer en liste over tupler først, hvor hver tupel indeholder et nøgleværdi-par. Opret et defaultdict-objekt kaldet orDict, der vil have standardværdier for en tom liste. Gentag listen over tupler først ved at bruge en for-løkke, og pak hver tuple ud i nøgle- og valvariablerne. Tilføj værdien val til den liste, der er knyttet til nøglen i ordbogen.

Udskriv den resulterende eller Dict-ordbog.

Bemærk : Det samme kan også gøres med en simpel ordbog, men at bruge defaultdict er mere effektivt i sådanne tilfælde.

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

>

>

Produktion:

defaultdict(, {'For': [2], 'Geeks': [1, 3]})>

Tidskompleksitet: O(n).
Hjælperum: O(n).

Bemærk, at der kun er to nøgle: værdipar i outputordbogen, men inputlisten indeholder tre tupler. Det første element (dvs. nøgle) er det samme for den første og tredje tuple, og to nøgler kan aldrig være ens.

Oprettelse af en ordbog over lister ved hjælp af Json

Ved at importerejson>modul. Det initialiserer en listelst>indeholdende tupler. Så en tom ordbogdict>er initialiseret. Koden konverterer listenlst>ind i en JSON-formateret streng ved brug afjson.dumps()> , og tildeler denne streng som en nøgle i ordbogendict>med værdien omregnet. Til sidst trykkes ordbogen.

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

>

>

Produktion:

{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'}>

Tidskompleksitet: O(n), hvor n er længden af ​​listen lst.
Hjælpeplads: O(n), hvor n er længden af ​​listen lst.

Oprettelse af ordbog over lister ved hjælp af itertools

En tilgang er at bruge zip_longest-funktionen fra itertools modul. Denne funktion giver dig mulighed for at iterere over to eller flere iterables på en parallel måde og udfylde eventuelle manglende elementer med en specificeret udfyldningsværdi.

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

>

>

Produktion

{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']}>

Tidskompleksitet: O(n), hvor n er længden af ​​den længste liste.
Hjælpeplads: På)