logo

Python | Způsoby, jak vytvořit slovník seznamů

Doposud jsme viděli způsoby, jak vytvořit slovník mnoha způsoby a různými operacemi s klíčem a hodnotami v Pythonu slovník . Nyní se podívejme na různé způsoby vytváření slovníku seznamů. Všimněte si, že omezení s klíči v Krajta jako klíče lze použít pouze neměnné datové typy, což znamená, že jako klíč nemůžeme použít slovník seznamů.

Pří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.>

Problémové prohlášení

Obvykle jsme dostali typrerror, pokud se jej pokusíme implementovat normálním způsobem.

pole.z javy

Python3








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

>

>

Výstup:

TypeError: unhashable type: 'list'>

Ale totéž lze velmi moudře udělat s hodnotami ve slovníku. Podívejme se na všechny různé způsoby, jak můžeme vytvořit slovník seznamů.

Způsoby, jak vytvořit slovník seznamů

Níže jsou uvedena témata, kterými se budeme v tomto článku zabývat:

Vytvořte slovník seznamů pomocí dolního indexu

Tento kód inicializuje prázdnou slovník myDict>. Poté přidá do slovníku dva páry klíč–hodnota:'key1'>s hodnotou[1, 2]>, a'key2'>s hodnotou['Geeks', 'For', 'Geeks']>. Nakonec kód vytiskne obsah slovníku.

Python3




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

>

>

Výstup:

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

Časová složitost: O(1) pro každé vložení slovníku a tisk slovníku.
Pomocný prostor: O(n), kde n je celkový počet prvků ve slovníku.

Vytvořte slovník seznamů pomocí metody append().

Přidání vnořeného seznamu jako hodnoty pomocí metoda append(). Vytvořte nový seznam a ten můžeme jednoduše připojit k hodnotě.

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ýstup:

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

Časová složitost: O(1).
Složitost pomocného prostoru: Na).

Vytvořte slovník seznamů pomocí metody setdefault().

Iterujte seznam a přidávejte prvky až do daného rozsahu pomocí 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)>

>

>

Výstup:

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

Časová složitost: O(n^2)
Složitost prostoru: Na)

Vytváření slovníku seznamů pomocí List Comprehension

v porozumění seznamu iterujeme hodnoty'1'>,'2'>, a'3'>a pro každou hodnotu vytvoří ve slovníku pár klíč-hodnota. Klíč je aktuální hodnota a hodnota je rozsah celých čísel počínaje hodnotou převedenou na celé číslo a končící hodnotou plus 1.

Krajta




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

>

metody v Javě

>

Výstup:

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

Časová složitost: O(1).
Složitost pomocného prostoru: Na).

Vytváření slovníku seznamů pomocí defaultdict

Importujte defaultdict třídy z modulu sbírek. Definujte seznam n-tic lst, přičemž každá n-tice obsahuje pár klíč–hodnota. Vytvořte objekt defaultdict s názvem orDict, který bude mít výchozí hodnoty prázdného seznamu. Iterujte seznam n-tic lst pomocí cyklu for a rozbalte každou n-tice do proměnných key a val. Přidejte hodnotu val do seznamu přidruženého ke klíči ve slovníku orDict.

Vytiskněte výsledný slovník nebo slovník Dict.

Poznámka : Totéž lze provést také s jednoduchým slovníkem, ale použití defaultdict je pro takové případy efektivnější.

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

>

>

co je android s easter egg

Výstup:

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

Časová složitost: O(n).
Pomocný prostor: O(n).

Všimněte si, že ve výstupním slovníku jsou pouze dva páry klíč: hodnota, ale seznam vstupů obsahuje tři n-tice. První prvek (tj. klíč) je stejný pro první a třetí n-tice a dva klíče nemohou být nikdy stejné.

Vytvoření slovníku seznamů pomocí Json

Importemjson>modul. Inicializuje seznamlst>obsahující n-tice. Pak prázdný slovníkdict>je inicializován. Kód převede seznamlst>do řetězce ve formátu JSON použitímjson.dumps()> a přiřadí tento řetězec jako klíč ve slovníkudict>s převedenou hodnotou. Nakonec je slovník vytištěn.

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ýstup:

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

Časová složitost: O(n), kde n je délka seznamu lst.
Pomocný prostor: O(n), kde n je délka seznamu lst.

Vytváření slovníku seznamů pomocí itertools

Jedním přístupem je použití funkce zip_longest z modul itertools. Tato funkce vám umožňuje iterovat přes dvě nebo více iterovatelných paralelním způsobem a doplnit všechny chybějící prvky zadanou hodnotou výplně.

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ýstup

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

Časová složitost: O(n), kde n je délka nejdelšího seznamu.
Pomocný prostor: Na)