Python | Načini ustvarjanja slovarja seznamov
Do zdaj smo videli načine za ustvarjanje slovarja na več načinov in različne operacije na ključu in vrednostih v Pythonu slovar . Zdaj pa si poglejmo različne načine ustvarjanja slovarja seznamov. Upoštevajte, da je omejitev s tipkami v Python slovar je kot ključe mogoče uporabiti le nespremenljive tipe podatkov, kar pomeni, da slovarja seznamov ne moremo uporabiti kot ključ.
Primer :
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. Izjava o težavi
Na splošno dobimo tippralno napako, če jo poskušamo implementirati na običajen način.
Python3
# Creating a dictionary> myDict> => {[> 1> ,> 2> ]:> 'Geeks'> }> print> (myDict)> |
Izhod:
TypeError: unhashable type: 'list'
Toda enako je mogoče storiti zelo modro z vrednostmi v slovarju. Oglejmo si vse različne načine, kako lahko ustvarimo slovar seznamov.
Načini ustvarjanja slovarja seznamov
Spodaj so teme, ki jih bomo obravnavali v tem članku:
- Uporaba indeks
- Uporabljati metoda append().
- Uporabljati metoda setdefault().
- Uporaba razumevanje seznama
- Uporaba defaultdict
- Uporaba Json.dumb() metoda
- Uporaba modul itertools
Ustvarite slovar seznamov z indeksom
Ta koda inicializira prazno slovar myDict> . Nato v slovar doda dva para ključ-vrednost: 'key1'> z vrednostjo [1, 2]> , in 'key2'> z vrednostjo ['Geeks', 'For', 'Geeks']> . Končno koda natisne vsebino slovarja.
Python3
# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> myDict[> 'key2'> ]> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> print> (myDict)> |
Izhod:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]} Časovna zahtevnost: O(1) za vsako vstavljanje slovarja in tiskanje slovarja.
Pomožni prostor: O(n), kjer je n skupno število elementov v slovarju.
Ustvarite slovar seznamov z uporabo metode append().
Dodajanje ugnezdenega seznama kot vrednosti z uporabo metoda append(). Ustvarite nov seznam in ta seznam lahko preprosto dodamo vrednosti.
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)> |
Izhod:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]} Časovna zahtevnost: O(1).
Kompleksnost pomožnega prostora: O(n).
Ustvarite slovar seznamov z uporabo metode setdefault().
Ponovite seznam in nadaljujte z dodajanjem elementov do danega obsega z uporabo metoda setdefault().
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)> |
Izhod:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']} Časovna zahtevnost: O(n^2)
Kompleksnost prostora: O(n)
Ustvarjanje slovarja seznamov z uporabo funkcije List Comprehension
noter razumevanje seznama ponavljamo vrednosti '1'> , '2'> , in '3'> in za vsako vrednost ustvari par ključ-vrednost v slovarju. Ključ je trenutna vrednost, vrednost pa obseg celih števil, ki se začne od vrednosti, pretvorjene v celo število, in konča pri vrednosti 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)> |
Izhod:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]} Časovna zahtevnost: O(1).
Kompleksnost pomožnega prostora: O(n).
Ustvarjanje slovarja seznamov z uporabo defaultdict
Uvozite defaultdict razreda iz modula zbirk. Definirajte seznam tulp lst, pri čemer vsaka tuple vsebuje par ključ-vrednost. Ustvarite objekt defaultdict z imenom orDict, ki bo imel privzete vrednosti praznega seznama. Ponavljajte po seznamu tork, najprej uporabite zanko for in razpakirajte vsako torko v spremenljivki ključ in val. Dodajte vrednost val na seznam, povezan s ključem v slovarju orDict.
Natisnite dobljeni ali Dict slovar.
Opomba : Enako je mogoče storiti tudi s preprostim slovarjem, vendar je za take primere učinkovitejša uporaba defaultdict.
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)> |
Izhod:
defaultdict(, {'For': [2], 'Geeks': [1, 3]}) Časovna zahtevnost: O(n).
Pomožni prostor: O(n).
Upoštevajte, da sta v izhodnem slovarju samo dva para ključ: vrednost, vhodni seznam pa vsebuje tri tuple. Prvi element (tj. ključ) je enak za prvo in tretjo torko in dva ključa nikoli ne moreta biti enaka.
Ustvarjanje slovarja seznamov z uporabo Json
Z uvozom json> modul. Inicializira seznam lst> ki vsebuje tuple. Potem pa prazen slovar dict> je inicializiran. Koda pretvori seznam lst> v niz v formatu JSON uporabo json.dumps()> in ta niz dodeli kot ključ v slovarju dict> s pretvorjeno vrednostjo. Nazadnje je slovar natisnjen.
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> )> |
Izhod:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'} Časovna zahtevnost: O(n), kjer je n dolžina seznama lst.
Pomožni prostor: O(n), kjer je n dolžina seznama lst.
Ustvarjanje slovarja seznamov z uporabo itertools
Eden od pristopov je uporaba funkcije zip_longest iz modul itertools. Ta funkcija vam omogoča vzporedno ponavljanje dveh ali več ponovljivih elementov in zapolnjevanje vseh manjkajočih elementov z določeno vrednostjo polnila.
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']}> |
Izhod
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']} Časovna zahtevnost: O(n), kjer je n dolžina najdaljšega seznama.
Pomožni prostor: O(n)