Tähän mennessä olemme nähneet tapoja luoda sanakirja useilla tavoilla ja eri toimintoja avaimelle ja arvoille Pythonissa sanakirja . Katsotaanpa nyt erilaisia tapoja luoda luettelojen sanakirja. Huomaa, että rajoitus avaimilla Python sanakirja on vain muuttumaton tietotyyppejä voidaan käyttää avaimina, mikä tarkoittaa, että emme voi käyttää luetteloiden sanakirjaa avaimena.
Esimerkki :
mysql näyttää kaikki käyttäjät
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.>
Ongelmailmoitus
Yleensä saimme typrerrorin, jos yritämme toteuttaa sen normaalilla tavalla.
Python 3
# Creating a dictionary> myDict> => {[> 1> ,> 2> ]:> 'Geeks'> }> print> (myDict)> |
>
>
Lähtö:
TypeError: unhashable type: 'list'>
Mutta sama voidaan tehdä erittäin viisaasti sanakirjan arvojen kanssa. Katsotaanpa kaikki eri tavat, joilla voimme luoda luetteloiden sanakirjan.
Tapoja luoda luettelosanakirja
Alla ovat aiheet, joita käsittelemme tässä artikkelissa:
- Käyttämällä alaindeksi
- Käyttämällä append() -menetelmä
- Käyttämällä setdefault()-metodi
- Käyttämällä listan ymmärtäminen
- Käyttämällä oletussääntö
- Käyttämällä Json.dumb() menetelmä
- Käyttämällä itertools-moduuli
Luo luettelojen sanakirja alaindeksillä
Tämä koodi alustaa tyhjän sanakirja myDict>
. Sitten se lisää kaksi avainarvoparia sanakirjaan:'key1'>
arvon kanssa[1, 2]>
, ja'key2'>
arvon kanssa['Geeks', 'For', 'Geeks']>
. Lopuksi koodi tulostaa sanakirjan sisällön.
Python 3
# Creating an empty dictionary> myDict> => {}> # Adding list as value> myDict[> 'key1'> ]> => [> 1> ,> 2> ]> myDict[> 'key2'> ]> => [> 'Geeks'> ,> 'For'> ,> 'Geeks'> ]> print> (myDict)> |
>
>
Lähtö:
{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]}>
Aika monimutkaisuus: O(1) jokaiselle sanakirjan lisäykselle ja sanakirjan tulostamiselle.
Aputila: O(n), missä n on sanakirjan elementtien kokonaismäärä.
Luo lista-sanakirja append()-menetelmällä
Sisäkkäisen listan lisääminen arvoksi käyttämällä append() -menetelmä. Luo uusi luettelo ja voimme yksinkertaisesti liittää luettelon arvoon.
Python 3
java concat merkkijono
# 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)> |
>
>
Lähtö:
{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]}>
Aika monimutkaisuus: O(1).
Aputilan monimutkaisuus: Päällä).
Luo lista-sanakirja setdefault()-menetelmällä
Toista luettelo ja jatka elementtien liittämistä annettuun alueeseen asti käyttämällä setdefault()-metodi.
Python 3
# 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)> |
>
>
Lähtö:
{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']}>
Aika monimutkaisuus: O(n^2)
Avaruuden monimutkaisuus: Päällä)
Listojen sanakirjan luominen luettelon ymmärtämisen avulla
Sisään listan ymmärtäminen toistamme arvoja'1'>
,'2'>
, ja'3'>
, ja jokaiselle arvolle se luo avain-arvo-parin sanakirjaan. Avain on nykyinen arvo, ja arvo on kokonaislukualue, joka alkaa kokonaisluvuksi muunnetusta arvosta ja päättyy arvoon 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)> |
>
>
Lähtö:
{'1': [1, 2], '3': [3, 4], '2': [2, 3]}>
Aika monimutkaisuus: O(1).
Aputilan monimutkaisuus: Päällä).
Luetteloiden sanakirjan luominen oletussanoman avulla
Tuo oletussääntö luokka kokoelmamoduulista. Määritä luettelo monikoista lst, joissa jokainen monikko sisältää avainarvo-parin. Luo oletussääntöobjekti nimeltä orDict, jolla on tyhjän luettelon oletusarvot. Toista monikkoluetteloa lst käyttämällä for-silmukkaa ja pura jokainen monikko avain- ja val-muuttujiin. Liitä arvo val luetteloon, joka liittyy avaimeen orDict-sanakirjassa.
Tulosta tuloksena oleva tai sanelusanakirja.
preity zinta
Huomautus : Saman voi tehdä myös yksinkertaisella sanakirjalla, mutta defaultdictin käyttö on tehokkaampaa tällaisissa tapauksissa.
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)> |
>
>
Lähtö:
defaultdict(, {'For': [2], 'Geeks': [1, 3]})>
Aika monimutkaisuus: O(n).
Aputila: O(n).
Huomaa, että tulossanakirjassa on vain kaksi avain: arvo -paria, mutta syöttöluettelo sisältää kolme monikkoa. Ensimmäinen elementti (eli avain) on sama ensimmäiselle ja kolmannelle monikolle, ja kaksi näppäintä ei voi koskaan olla sama.
yhdistävä lajittelu
Luetteloiden sanakirjan luominen Json-ohjelmalla
Tuomallajson>
moduuli. Se alustaa luettelonlst>
sisältää monikkoa. Sitten tyhjä sanakirjadict>
on alustettu. Koodi muuntaa luettelonlst>
JSON-muotoiseen merkkijonoon käyttämälläjson.dumps()>
, ja määrittää tämän merkkijonon avaimeksi sanakirjassadict>
muunnetun arvon kanssa. Lopuksi sanakirja painetaan.
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> )> |
>
>
Lähtö:
{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'}>
Aika monimutkaisuus: O(n), missä n on listan lst pituus.
Aputila: O(n), missä n on listan lst pituus.
Listojen sanakirjan luominen käyttämällä itert-työkalut
Yksi tapa on käyttää zip_longest-funktiota itertools-moduuli. Tämän toiminnon avulla voit iteroida kahta tai useampaa iteraatiota rinnakkain ja täyttää puuttuvat elementit määritetyllä täyttöarvolla.
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']}> |
>
>Lähtö
{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']}>
Aika monimutkaisuus: O(n), missä n on pisimmän listan pituus.
Aputila: Päällä)