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.
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:
- Použitím dolní index
- Za použití metoda append().
- Za použití metoda setdefault().
- Použitím porozumění seznamu
- Použitím defaultdict
- Použitím Json.dumb() metoda
- Použitím modul itertools
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)> |
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)> |
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
Importem json> modul. Inicializuje seznam lst> obsahující n-tice. Pak prázdný slovník dict> je inicializován. Kód převede seznam lst> do řetězce ve formátu JSON použitím json.dumps()> a přiřadí tento řetězec jako klíč ve slovníku dict> 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)