logo

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:

java reťazec obsahuje
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:

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.

koniec java

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

>

>

python je číselný

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.

1 miliarda až milión

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ímjson>modul. Inicializuje zoznamlst>obsahujúce n-tice. Potom prázdny slovníkdict>je inicializovaný. Kód konvertuje zoznamlst>do reťazca vo formáte JSON použitímjson.dumps()> a priradí tento reťazec ako kľúč v slovníkudict>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

formátovať dátum v jave
{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)