Fins ara, hem vist les maneres de crear un diccionari de múltiples maneres i diferents operacions sobre la clau i els valors a Python. diccionari . Ara, anem a veure diferents maneres de crear un diccionari de llistes. Tingueu en compte que la restricció amb les tecles a l' Python El diccionari és només immutable. Els tipus de dades es poden utilitzar com a claus, el que significa que no podem utilitzar un diccionari de llistes com a clau.
Exemple :
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.> Plantejament del problema
En general, tenim el typrerror si intentem implementar-lo de la manera normal.
Python 3
# Creating a dictionary> myDict>=> {[>1>,>2>]:>'Geeks'>}> print>(myDict)> |
>
>
Sortida:
TypeError: unhashable type: 'list'>
Però el mateix es pot fer molt sàviament amb els valors d'un diccionari. Vegem totes les maneres diferents de crear un diccionari de llistes.
cerca binària en java
Maneres de crear un diccionari de llistes
A continuació es mostren els temes que tractarem en aquest article:
- Utilitzant subíndex
- Utilitzant el mètode append().
- Utilitzant el mètode setdefault().
- Utilitzant comprensió de llista
- Utilitzant dictamen predeterminat
- Utilitzant Json.dumb() mètode
- Utilitzant mòdul iertools
Creeu un diccionari de llistes amb subíndex
Aquest codi inicialitza un codi buit diccionari myDict>. A continuació, afegeix dos parells clau-valor al diccionari:'key1'>amb el valor[1, 2]>, i'key2'>amb el valor['Geeks', 'For', 'Geeks']>. Finalment, el codi imprimeix el contingut del diccionari.
Python 3
# Creating an empty dictionary> myDict>=> {}> # Adding list as value> myDict[>'key1'>]>=> [>1>,>2>]> myDict[>'key2'>]>=> [>'Geeks'>,>'For'>,>'Geeks'>]> print>(myDict)> |
>
>
Sortida:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]}> Complexitat temporal: O(1) per a cada inserció i impressió del diccionari.
Espai auxiliar: O(n), on n és el nombre total d'elements del diccionari.
Creeu un diccionari de llistes utilitzant el mètode append().
Afegint una llista imbricada com a valor mitjançant l' mètode append(). Creeu una llista nova i simplement podem afegir aquesta llista al valor.
Python 3
# 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)> |
>
>
Sortida:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]}> Complexitat temporal: O(1).
Complexitat de l'espai auxiliar: O(n).
Creeu un diccionari de llistes utilitzant el mètode setdefault().
Itereu la llista i aneu afegint els elements fins a l'interval donat utilitzant el mètode setdefault().
Python 3
L'actriu Rakul Preet Singh
# 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)> |
>
>
Sortida:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']}> Complexitat temporal: O(n^2)
Complexitat espacial: O(n)
Creació de diccionaris de llistes mitjançant la comprensió de llistes
En comprensió de llista iterem sobre els valors'1'>,'2'>, i'3'>, i per a cada valor, crea un parell clau-valor al diccionari. La clau és el valor actual i el valor és un rang d'enters que comença des del valor convertit en un enter i acaba amb el valor més 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)> |
>
>
Sortida:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]}> Complexitat temporal: O(1).
Complexitat de l'espai auxiliar: O(n).
Creació de diccionari de llistes mitjançant defaultdict
Importa el dictamen predeterminat classe del mòdul de col·leccions. Definiu una llista de tuples lst amb cada tupla que contingui un parell clau-valor. Creeu un objecte defaultdict anomenat orDict que tindrà valors per defecte d'una llista buida. Itereu per la llista de tuples lst utilitzant un bucle for i desempaqueteu cada tupla a les variables clau i val. Afegiu el valor val a la llista associada a la clau al diccionari orDict.
exemples nfa
Imprimiu el diccionari resultant o Dict.
Nota : També es pot fer el mateix amb un diccionari senzill, però utilitzar defaultdict és més eficient en aquests casos.
Python 3
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)> |
>
>
Sortida:
defaultdict(, {'For': [2], 'Geeks': [1, 3]})> Complexitat temporal: O(n).
Espai auxiliar: O(n).
Tingueu en compte que només hi ha dues claus: parells de valors al diccionari de sortida, però la llista d'entrada conté tres tuples. El primer element (és a dir, la clau) és el mateix per a la primera i la tercera tuple i dues claus mai poden ser iguals.
Creació d'un diccionari de llistes amb Json
En importar eljson>mòdul. Inicialitza una llistalst>que conté tuples. Després, un diccionari buitdict>està inicialitzat. El codi converteix la llistalst>en una cadena amb format JSON utilitzantjson.dumps()> , i assigna aquesta cadena com a clau al diccionaridict>amb el valor convertit. Finalment, s'imprimeix el diccionari.
Python 3
#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>)> |
>
>
Sortida:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'}> Complexitat temporal: O(n), on n és la longitud de la llista lst.
Espai auxiliar: O(n), on n és la longitud de la llista lst.
punters al c
Creació de diccionari de llistes utilitzant itertools
Un enfocament és utilitzar la funció zip_longest del fitxer mòdul iertools. Aquesta funció us permet iterar més de dos o més iterables de manera paral·lela, omplint els elements que falten amb un valor de farciment especificat.
Python 3
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']}> |
>
>Sortida
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']}> Complexitat temporal: O(n), on n és la longitud de la llista més llarga.
Espai auxiliar: O(n)