logo

Python | Sąrašų žodyno kūrimo būdai

Iki šiol matėme būdus, kaip sukurti žodyną keliais būdais ir įvairiomis „Python“ rakto ir reikšmėmis operacijomis. žodynas . Dabar pažvelkime į skirtingus sąrašų žodyno kūrimo būdus. Atkreipkite dėmesį, kad apribojimas su klavišais Python žodynas yra tik nekeičiami duomenų tipai, kuriuos galima naudoti kaip raktus, o tai reiškia, kad negalime naudoti sąrašų žodyno kaip rakto.

Pavyzdys :



  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.>

Problemos pareiškimas

Paprastai mes gauname tiprerror, jei bandome jį įgyvendinti įprastu būdu.

Python3








# Creating a dictionary> myDict>=> {[>1>,>2>]:>'Geeks'>}> print>(myDict)>

>

dvejetainis medis vs dvejetainis paieškos medis
>

Išvestis:

TypeError: unhashable type: 'list'>

Bet tą patį galima labai išmintingai padaryti su žodyno reikšmėmis. Pažiūrėkime, kaip sukurti sąrašų žodyną.

Sąrašų žodyno kūrimo būdai

Žemiau pateikiamos temos, kurias aptarsime šiame straipsnyje:

Sukurkite sąrašų žodyną naudodami apatinį indeksą

Šis kodas inicijuoja tuščią žodynas myDict>. Tada jis į žodyną prideda dvi raktų ir reikšmių poras:'key1'>su verte[1, 2]>, ir'key2'>su verte['Geeks', 'For', 'Geeks']>. Galiausiai kodas išspausdina žodyno turinį.

Python3




# Creating an empty dictionary> myDict>=> {}> # Adding list as value> myDict[>'key1'>]>=> [>1>,>2>]> myDict[>'key2'>]>=> [>'Geeks'>,>'For'>,>'Geeks'>]> print>(myDict)>

>

>

Išvestis:

{'key2': ['Geeks', 'For', 'Geeks'], 'key1': [1, 2]}>

Laiko sudėtingumas: O(1) kiekvienam žodyno įterpimui ir žodyno spausdinimui.
Pagalbinė erdvė: O(n), kur n yra bendras žodyno elementų skaičius.

Sukurkite sąrašų žodyną naudodami append() metodą

Įdėto sąrašo įtraukimas kaip reikšmė naudojant append() metodas. Sukurkite naują sąrašą ir mes galime tiesiog pridėti tą sąrašą prie vertės.

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

>

>

Išvestis:

{'key1': [1, 2, ['Geeks', 'For', 'Geeks']]}>

Laiko sudėtingumas: O(1).
Pagalbinės erdvės sudėtingumas: O(n).

Sukurkite sąrašų žodyną naudodami setdefault() metodą

Pakartokite sąrašą ir toliau pridėkite elementus iki nurodyto diapazono naudodami setdefault() metodas.

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

>

>

Išvestis:

{1: ['1'], 2: ['1', '2'], 3: ['2', '3'], 4: ['3']}>

Laiko sudėtingumas: O(n^2)
Erdvės sudėtingumas: O(n)

c++ gui

Sąrašų žodyno kūrimas naudojant sąrašo supratimą

Į sąrašo supratimas kartojame vertybes'1'>,'2'>, ir'3'>, ir kiekvienai vertei žodyne sukuria rakto-reikšmių porą. Raktas yra dabartinė vertė, o vertė yra sveikųjų skaičių diapazonas, pradedant nuo vertės, konvertuotos į sveikąjį skaičių, ir baigiant reikšme plius 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)>

>

>

Išvestis:

{'1': [1, 2], '3': [3, 4], '2': [2, 3]}>

Laiko sudėtingumas: O(1).
Pagalbinės erdvės sudėtingumas: O(n).

Sąrašų žodyno kūrimas naudojant defaultdict

Importuoti numatytasis diktatorius klasė iš kolekcijų modulio. Apibrėžkite eilučių lst sąrašą su kiekviena kortele, kurioje yra rakto-reikšmių pora. Sukurkite numatytąjį dikto objektą, pavadintą orDict, kuriame bus numatytosios tuščio sąrašo reikšmės. Pakartokite eilučių sąrašą lst naudodami for kilpą ir išpakuokite kiekvieną eilutę į rakto ir val kintamuosius. Pridėkite reikšmę val prie sąrašo, susieto su raktu orDict žodyne.

Atsispausdinkite gautą arba Dikto žodyną.

Pastaba : Tą patį galima padaryti ir naudojant paprastą žodyną, tačiau tokiais atvejais veiksmingiau naudoti defaultdict.

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

>

>

Išvestis:

defaultdict(, {'For': [2], 'Geeks': [1, 3]})>

Laiko sudėtingumas: O(n).
Pagalbinė erdvė: O(n).

Atkreipkite dėmesį, kad išvesties žodyne yra tik dvi raktų: reikšmių poros, tačiau įvesties sąraše yra trys eilutės. Pirmasis elementas (t. y. raktas) yra vienodas pirmajai ir trečiajai kortelei, o du klavišai niekada negali būti vienodi.

Sąrašų žodyno kūrimas naudojant Json

Importuodamijson>modulis. Jis inicijuoja sąrašąlst>kuriuose yra kortelių. Tada tuščias žodynasdict>yra inicijuojamas. Kodas konvertuoja sąrašąlst>į JSON formatuotą eilutę naudojantjson.dumps()> , ir priskiria šią eilutę kaip raktą žodynedict>su konvertuota verte. Galiausiai atspausdinamas žodynas.

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

>

>

Išvestis:

{'[['Geeks', 1], ['For', 2], ['Geeks', 3]]': 'converted'}>

Laiko sudėtingumas: O(n), kur n yra sąrašo lst ilgis.
Pagalbinė erdvė: O(n), kur n yra sąrašo lst ilgis.

Sąrašų žodyno kūrimas naudojant iterto įrankiai

Vienas iš būdų yra naudoti funkciją zip_longest iš itertools modulis. Ši funkcija leidžia lygiagrečiai kartoti dvi ar daugiau iteracijų, užpildant visus trūkstamus elementus su nurodyta užpildymo verte.

Python3

java gauna dabartinę datą




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']}>

>

>

Išvestis

{1: [10, 'a'], 2: [20, 'b'], 3: [30, 'c'], 0: [40, 'd', 0, 'e']}>

Laiko sudėtingumas: O(n), kur n yra ilgiausio sąrašo ilgis.
Pagalbinė erdvė: O(n)