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