Python | Spôsoby vytvorenia slovníka zoznamov
Doteraz sme videli spôsoby, ako vytvoriť slovník viacerými spôsobmi a rôznymi operáciami s kľúčom a hodnotami v Pythone slovník . Teraz sa pozrime na rôzne spôsoby vytvárania slovníka zoznamov. Všimnite si, že obmedzenie s kľúčmi v Python slovník je ako kľúče možné použiť len nemenné dátové typy, čo znamená, že ako kľúč nemôžeme použiť slovník zoznamov.
Príklad :
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. Vyhlásenie o probléme
Vo všeobecnosti dostaneme typrerror, ak sa ho pokúsime implementovať normálnym spôsobom.
Python3
# Creating a dictionary> myDict> => {[> 1> ,> 2> ]:> 'Geeks'> }> print> (myDict)> |
Výkon:
TypeError: unhashable type: 'list'
Ale to isté sa dá urobiť veľmi múdro s hodnotami v slovníku. Pozrime sa na všetky rôzne spôsoby, ako môžeme vytvoriť slovník zoznamov.
Spôsoby, ako vytvoriť slovník zoznamov
Nižšie sú uvedené témy, ktorým sa budeme venovať v tomto článku:
- Použitím dolný index
- Pomocou metóda append().
- Pomocou setdefault() metóda
- Použitím porozumenie zoznamu
- Použitím defaultdict
- Použitím Json.dumb() metóda
- Použitím modul itertools
Vytvorte Slovník zoznamov pomocou dolného indexu
Tento kód inicializuje prázdne miesto slovník myDict> . Potom do slovníka pridá dva páry kľúč – hodnota: 'key1'> s hodnotou [1, 2]> , a 'key2'> s hodnotou ['Geeks', 'For', 'Geeks']> . Nakoniec kód vytlačí obsah slovníka.
Python3
# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> myDict[> 'key2'> ]> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> print> (myDict)> |
Výkon:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]} Časová zložitosť: O(1) pre každé vloženie slovníka a vytlačenie slovníka.
Pomocný priestor: O(n), kde n je celkový počet prvkov v slovníku.
Vytvorte slovník zoznamov pomocou metódy append().
Pridanie vnoreného zoznamu ako hodnoty pomocou metóda append(). Vytvorte nový zoznam a tento zoznam môžeme jednoducho pripojiť k hodnote.
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)> |
Výkon:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]} Časová zložitosť: O(1).
Zložitosť pomocného priestoru: O(n).
Vytvorte slovník zoznamov pomocou metódy setdefault().
Opakujte zoznam a pripájajte prvky do daného rozsahu pomocou setdefault() metóda.
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)> |
Výkon:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']} Časová zložitosť: O(n^2)
Zložitosť priestoru: O(n)
Vytváranie slovníka zoznamov pomocou funkcie List Comprehension
In porozumenie zoznamu iterujeme cez hodnoty '1'> , '2'> , a '3'> a pre každú hodnotu vytvorí v slovníku pár kľúč – hodnota. Kľúčom je aktuálna hodnota a hodnota je rozsah celých čísel počínajúc hodnotou konvertovanou na celé číslo a končiacou hodnotou 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)> |
Výkon:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]} Časová zložitosť: O(1).
Zložitosť pomocného priestoru: O(n).
Vytváranie slovníka zoznamov pomocou defaultdict
Importovať defaultdict triedy z modulu kolekcií. Definujte zoznam n-tic lst, pričom každá n-tica obsahuje pár kľúč – hodnota. Vytvorte objekt defaultdict s názvom orDict, ktorý bude mať predvolené hodnoty prázdneho zoznamu. Iterujte zoznam n-tic lst pomocou cyklu for a rozbaľte každú n-ticu do premenných key a val. Pridajte hodnotu val do zoznamu priradeného ku kľúču v slovníku orDict.
Vytlačte výsledný alebo Dictový slovník.
Poznámka : To isté sa dá urobiť aj s jednoduchým slovníkom, ale použitie defaultdict je v takýchto prípadoch efektívnejšie.
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)> |
Výkon:
defaultdict(, {'For': [2], 'Geeks': [1, 3]}) Časová zložitosť: O(n).
Pomocný priestor: O(n).
Všimnite si, že vo výstupnom slovníku sú len dva páry kľúč: hodnota, ale zoznam vstupov obsahuje tri n-tice. Prvý prvok (t. j. kľúč) je rovnaký pre prvú a tretiu n-ticu a dva kľúče nemôžu byť nikdy rovnaké.
Vytvorenie slovníka zoznamov pomocou Json
Importovaním json> modul. Inicializuje zoznam lst> obsahujúce n-tice. Potom prázdny slovník dict> je inicializovaný. Kód konvertuje zoznam lst> do reťazca vo formáte JSON použitím json.dumps()> a priradí tento reťazec ako kľúč v slovníku dict> s prepočítanou hodnotou. Nakoniec sa vytlačí slovník.
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> )> |
Výkon:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'} Časová zložitosť: O(n), kde n je dĺžka zoznamu lst.
Pomocný priestor: O(n), kde n je dĺžka zoznamu lst.
Vytváranie slovníka zoznamov pomocou itertools
Jedným z prístupov je použitie funkcie zip_longest z modul itertools. Táto funkcia vám umožňuje iterovať cez dve alebo viac iterovateľných položiek paralelným spôsobom a doplniť všetky chýbajúce prvky zadanou hodnotou výplne.
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']}> |
Výkon
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']} Časová zložitosť: O(n), kde n je dĺžka najdlhšieho zoznamu.
Pomocný priestor: O(n)