Fino ad ora, abbiamo visto come creare un dizionario in molteplici modi e diverse operazioni sulla chiave e sui valori in Python dizionario . Ora vediamo diversi modi per creare un dizionario di elenchi. Si noti che la restrizione con le chiavi nel file Pitone dizionario è che solo i tipi di dati immutabili possono essere usati come chiavi, il che significa che non possiamo usare un dizionario di elenchi come chiave.
Esempio :
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.> Dichiarazione problema
Generalmente riceviamo il typrerror se proviamo a implementarlo nel modo normale.
Python3
# Creating a dictionary> myDict>=> {[>1>,>2>]:>'Geeks'>}> print>(myDict)> |
>
>
Produzione:
TypeError: unhashable type: 'list'>
Ma lo stesso può essere fatto molto saggiamente con i valori di un dizionario. Vediamo tutti i diversi modi in cui possiamo creare un dizionario di elenchi.
Modi per creare un dizionario di elenchi
Di seguito sono riportati gli argomenti che tratteremo in questo articolo:
- Utilizzando pedice
- Usando il metodo append()
- Usando il metodo setdefault()
- Utilizzando comprensione delle liste
- Utilizzando defaultdict
- Utilizzando Json.dumb() metodo
- Utilizzando modulo itertools
Crea un dizionario di elenchi utilizzando il pedice
Questo codice inizializza un file vuoto dizionario myDict>. Quindi aggiunge due coppie chiave-valore al dizionario:'key1'>con il valore[1, 2]>, E'key2'>con il valore['Geeks', 'For', 'Geeks']>. Infine, il codice stampa il contenuto del dizionario.
Python3
# Creating an empty dictionary> myDict>=> {}> # Adding list as value> myDict[>'key1'>]>=> [>1>,>2>]> myDict[>'key2'>]>=> [>'Geeks'>,>'For'>,>'Geeks'>]> print>(myDict)> |
>
>
Produzione:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]}> Complessità temporale: O(1) per ogni inserimento dizionario e stampa del dizionario.
Spazio ausiliario: O(n), dove n è il numero totale di elementi nel dizionario.
Crea un dizionario di elenchi utilizzando il metodo append()
Aggiunta di un elenco nidificato come valore utilizzando il file metodo append(). Crea un nuovo elenco e possiamo semplicemente aggiungere tale elenco al valore.
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)> |
>
>
Produzione:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]}> Complessità temporale: O(1).
Complessità dello spazio ausiliario: SU).
Crea un dizionario di elenchi utilizzando il metodo setdefault()
Itera l'elenco e continua ad aggiungere gli elementi fino all'intervallo specificato utilizzando il comando metodo 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)> |
>
>
Produzione:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']}> Complessità temporale: O(n^2)
Complessità spaziale: SU)
Creazione di un dizionario di elenchi utilizzando la comprensione delle liste
In comprensione delle liste iteriamo sui valori'1'>,'2'>, E'3'>e per ogni valore crea una coppia chiave-valore nel dizionario. La chiave è il valore corrente e il valore è un intervallo di numeri interi che inizia dal valore convertito in numero intero e termina con il valore più 1.
Pitone
# 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)> |
>
>
lupo contro volpe
Produzione:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]}> Complessità temporale: O(1).
Complessità dello spazio ausiliario: SU).
Creazione di un dizionario di elenchi utilizzando defaultdict
Importa il defaultdict classe dal modulo collezioni. Definire un elenco di tuple lst con ciascuna tupla contenente una coppia chiave-valore. Crea un oggetto defaultdict chiamato orDict che avrà i valori predefiniti di un elenco vuoto. Itera sull'elenco delle tuple lst utilizzando un ciclo for e scompatta ciascuna tupla nelle variabili key e val. Aggiungi il valore val all'elenco associato alla chiave nel dizionario orDict.
Stampa il dizionario risultante o Dict.
Nota : La stessa cosa può essere fatta anche con un semplice dizionario ma usare defaultdict è più efficiente in questi casi.
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)> |
>
>
Produzione:
defaultdict(, {'For': [2], 'Geeks': [1, 3]})> Complessità temporale: O(n).
Spazio ausiliario: O(n).
Si noti che ci sono solo due coppie chiave: valore nel dizionario di output ma l'elenco di input contiene tre tuple. Il primo elemento (cioè la chiave) è lo stesso per la prima e la terza tupla e due chiavi non possono mai essere le stesse.
Creazione di un dizionario di elenchi utilizzando Json
Importando iljson>modulo. Inizializza una listalst>contenente tuple. Quindi, un dizionario vuotodict>è inizializzato. Il codice converte l'elencolst>in una stringa formattata JSON utilizzandojson.dumps()> e assegna questa stringa come chiave nel dizionariodict>con il valore convertito. Infine, il dizionario viene stampato.
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>)> |
>
>
Produzione:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'}> Complessità temporale: O(n), dove n è la lunghezza della lista lst.
Spazio ausiliario: O(n), dove n è la lunghezza della lista lst.
Creazione di un dizionario di elenchi utilizzando itertools
Un approccio consiste nell'utilizzare la funzione zip_longest dal file modulo itertools. Questa funzione consente di eseguire l'iterazione su due o più iterabili in modo parallelo, riempiendo eventuali elementi mancanti con un valore di riempimento specificato.
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']}> |
>
>Produzione
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']}> Complessità temporale: O(n), dove n è la lunghezza dell'elenco più lungo.
Spazio ausiliario: SU)