logo

Python | Gaukite raktą iš reikšmės žodyne

Pažiūrėkime, kaip gauti raktą pagal reikšmę Python žodyne.

Pavyzdys: One-Liner kodas



Python3








# creating a new dictionary> my_dict>=>{>'Java'>:>100>,>'Python'>:>112>,>'C'>:>11>}> # one-liner> print>(>'One line Code Key value: '>,>list>(my_dict.keys())> >[>list>(my_dict.values()).index(>100>)])>

>

>

Išvestis:

Java>

Ištraukite raktą iš Python žodyno naudodami reikšmę

1 būdas: gaukite raktą pagal vertę naudodami sąrašo supratimą

Sąrašo supratimas susideda iš skliaustų, kuriuose yra išraiška, kuri vykdoma kiekvienam elementui kartu su for kilpa, kad būtų kartojamas kiekvienas Python sąrašo elementas, kad būtų gautas raktas iš reikšmės Žodynas .

Python3

kiek 0 iš milijardo




dic>=>{>'geeks'>:>'A'>,>'for'>:>'B'>,>'geeks'>:>'C'>}> value>=> {i>for> i>in> dic>if> dic[i]>=>=>'B'>}> print>(>'key by value:'>,value)>

>

>

Išvestis:

key by value: {'for'}>

Laiko sudėtingumas: O(N)
Pagalbinė erdvė: O(1)

2 būdas: Gaukite raktą pagal vertę naudodami list.index()

The index() metodas grąžina atitinkamos sąrašo reikšmės indeksą. Čia naudojamas metodas yra rasti du atskirus raktų ir reikšmių sąrašus. Tada paimkite raktą naudodami padėtis vertės val_sąraše. Kadangi raktas bet kurioje raktų sąrašo N pozicijoje turės atitinkamą reikšmę N pozicijoje val_list.

Python3




# creating a new dictionary> my_dict>=>{>'java'>:>100>,>'python'>:>112>,>'c'>:>11>}> # list out keys and values separately> key_list>=> list>(my_dict.keys())> val_list>=> list>(my_dict.values())> # print key with val 100> position>=> val_list.index(>100>)> print>(key_list[position])>

>

>

Išvestis:

java>

Laiko sudėtingumas: O(1)
Pagalbinė erdvė: O(1)

3 būdas: Gaukite raktą pagal vertę naudodami dict.item()

Taip pat galime gauti raktą iš reikšmės, suderindami visas reikšmes naudodami dict.item() ir atspausdindami atitinkamą raktą su nurodyta verte.

Python3




# function to return key for any value> def> get_key(val):> > >for> key, value>in> my_dict.items():> >if> val>=>=> value:> >return> key> >return> 'key doesn't exist'> # Driver Code> my_dict>=> {>'Java'>:>100>,>'Python'>:>112>,>'C'>:>11>}> print>(get_key(>100>))> print>(get_key(>11>))>

>

>

Išvestis

Java C>

Laiko sudėtingumas: O(n), kur n yra raktų ir reikšmių porų skaičius žodyne.
Pagalbinė erdvė: O(1), nes funkcijos naudojama erdvė nepriklauso nuo įvesties žodyno dydžio.

abėcėlės skaičiai

4 būdas: lambda ir filtro () naudojimas

Štai pavyzdys, kaip naudoti funkciją filtras () norint gauti raktą, atitinkantį žodyno reikšmę:

Python3




my_dict>=> {>'Java'>:>100>,>'Python'>:>112>,>'C'>:>11>}> # Get the key corresponding to value 100> key>=> list>(>filter>(>lambda> x: my_dict[x]>=>=> 100>, my_dict))[>0>]> print>(key)> #This code is contributed by Edula Vinay Kumar Reddy>

>

>

Išvestis

Java>

Šiame pavyzdyje funkcija filtras() naudojama sukurti raktų sąrašą iš my_dict, kur reikšmė lygi 100. Tada gautas sąrašas indeksuojamas 0 pozicijoje, kad būtų gautas pirmasis elementas, kuris yra raktas, atitinkantis reikšmę. 100.

Laiko sudėtingumas: O(n) , nes funkcijai filtras() reikia kartoti visą žodyną, kad būtų sukurtas raktų sąrašas.
Pagalbinė erdvė yra O(n) , nes raktų sąrašo, sukurto filtru() pagalba, dydis yra lygus elementų skaičiui žodyne.

5 METODAS: elementų metodo naudojimas

Šis kodas randa tam tikros reikšmės raktą žodyne, naudodamas sąrašo supratimą, kad būtų kartojamas žodyno elementai ir patikrinama, ar reikšmė atitinka nurodytą reikšmę. Jei raktas randamas, jis įtraukiamas į sąrašą, o pirmasis sąrašo elementas išspausdinamas kaip nurodytos reikšmės raktas. Jei reikšmės žodyne nerasta, išspausdinamas pranešimas, nurodantis, kad ji nerasta.

Žingsniai:

  1. Naudokite žodyno elementų metodą, kad peržiūrėtumėte kiekvieną my_dict rakto-reikšmių porą.
  2. Patikrinkite, ar su dabartiniu raktu susijusi vertė yra lygi nurodytai vertei.
  3. Jei jis lygus, pridėkite esamą raktą prie klavišų sąrašo.
  4. Jei ciklas baigiamas neradus atitinkančios reikšmės, išspausdinkite pranešimą, nurodantį, kad reikšmė nerasta.
  5. Jei rastas atitinkantis raktas, išspausdinkite pirmąjį sąraše esantį raktą.

Python3




# input list> my_dict>=> {>'Java'>:>100>,>'Python'>:>112>,>'C'>:>11>}> value>=> 112> key_list>=> [key>for> key, val>in> my_dict.items()>if> val>=>=> value]> if> len>(key_list)>>>:> >print>(>'The key for the value'>, value,>'is'>, key_list[>0>])> else>:> >print>(>'Value not found in dictionary'>)>

>

>

Išvestis

The key for the value 112 is Python>

Laiko sudėtingumas: O(N), kur n yra raktų ir reikšmių porų skaičius žodyne.
Pagalbinė erdvė: O(K) , kur k yra raktų, atitinkančių nurodytą reikšmę, skaičius.

6 METODAS: Re modulio naudojimas

Programa naudoja Python re modulį, kad rastų raktą žodyne, atitinkantį nurodytą reikšmę. Jis sukuria reguliariosios išraiškos šabloną, atitinkantį reikšmę, apsuptą žodžių ribomis, tada naudoja funkciją next(), kad kartotų žodyno elementus ir ieškotų reikšmės, atitinkančios šabloną. Jei randama atitiktis, programa grąžina atitinkamą raktą.

ALGORITMAS:

  1. Sukurkite reguliariosios išraiškos šabloną, atitinkantį mūsų ieškomą vertę, apsuptą žodžių ribomis.
  2. Naudokite funkciją next() norėdami kartoti žodyno elementus ir ieškoti reikšmės, atitinkančios šabloną.
  3. Jei randama atitiktis, grąžinkite atitinkamą raktą. Kitu atveju grąžinkite Nėra.

Python3




import> re> # Given input> my_dict>=> {>'Java'>:>100>,>'Python'>:>112>,>'C'>:>11>}> value>=> 100> # Program code> pattern>=> re.>compile>(r>''> +> str>(value)>+> r>''>)> key>=> next>((k>for> k, v>in> my_dict.items()>if> pattern.search(>str>(v))),>None>)> print>(key)>

>

>

Išvestis

Java>

Laiko sudėtingumas: O(N), Reguliariosios išraiškos modelio sukūrimas užtrunka O(1) laiko. Reikšmės, atitinkančios šabloną, paieška kiekviename žodyno elemente užtrunka O(n) laiko blogiausiu atveju, kur n yra elementų skaičius žodyne. Funkcija next() ir if sakinys trunka O(1) laiką. Todėl bendras programos laiko sudėtingumas yra O(n).

Pagalbinė erdvė: O(1), Reguliariosios išraiškos šablonui ir pagrindiniam kintamajam reikia O(1) vietos. Modelio kintamajam ir generatoriaus išraiškai next() funkcijos viduje reikalinga O(1) erdvė. Generatoriaus išraiškoje naudojami kintamieji k ir v nereikalauja papildomos vietos, nes jie sukuriami kaip iteracijos dalis. Todėl bendras programos sudėtingumas erdvėje yra O(1).