logo

Python | Tapoja luoda luettelosanakirja

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:

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