La oss se hvordan du får nøkkelen etter verdi i Python Dictionary.
Eksempel: One-Liner-kode
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>)])> |
>
>
Produksjon:
Java>
Trekk ut nøkkel fra Python Dictionary ved å bruke verdi
Metode 1: Få nøkkelen etter verdi ved å bruke listeforståelse
En listeforståelse består av parenteser som inneholder uttrykket, som utføres for hvert element sammen med for-løkken for å iterere over hvert element i Python-listen for å hente nøkkelen fra en verdi i Ordbok .
Python3
dic>=>{>'geeks'>:>'A'>,>'for'>:>'B'>,>'geeks'>:>'C'>}> value>=> {i>for> i>in> dic>if> dic[i]>=>=>'B'>}> print>(>'key by value:'>,value)> |
>
>
Produksjon:
key by value: {'for'}> Tidskompleksitet: PÅ)
Hjelpeplass: O(1)
Metode 2: Få nøkkelen etter verdi ved å bruke en list.index()
De index() metode returnerer indeksen for den tilsvarende verdien i en liste. Tilnærmingen som brukes her er å finne to separate lister med nøkler og verdier. Hent deretter nøkkelen ved hjelp av posisjon av verdien i val_listen. Som nøkkel ved enhver posisjon N i key_list vil ha en tilsvarende verdi ved posisjon N i 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])> |
>
>
Produksjon:
java>
Tidskompleksitet: O(1)
Ekstra plass: O(1)
Metode 3: Få nøkkelen etter verdi ved å bruke dict.item()
Vi kan også hente nøkkelen fra en verdi ved å matche alle verdiene ved å bruke dict.item() og deretter skrive ut den tilsvarende nøkkelen til den gitte verdien.
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>))> |
>
>Produksjon
Java C>
Tidskompleksitet: O(n), hvor n er antall nøkkelverdi-par i ordboken.
Ekstra plass: O(1), siden plassen som brukes av funksjonen ikke avhenger av størrelsen på inndataordboken.
Metode 4: Bruke lambda og filter()
Her er et eksempel på bruk av filter()-funksjonen for å få nøkkelen som tilsvarer en verdi i en ordbok:
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> |
>
>Produksjon
Java>
I dette eksemplet brukes filter()-funksjonen til å lage en liste med nøkler fra my_dict hvor verdien er lik 100. Den resulterende listen blir deretter indeksert ved posisjon 0 for å få det første elementet, som er nøkkelen som tilsvarer verdien 100.
Tidskompleksitet: O(n) , siden filter()-funksjonen må iterere gjennom hele ordboken for å lage listen over nøkler.
Hjelpemellomrom er O(n) , da listen over nøkler opprettet av filter() har en størrelse som er lik antall elementer i ordboken.
METODE 5:Bruke gjenstandsmetoden
Denne koden finner nøkkelen til en gitt verdi i en ordbok ved å bruke en listeforståelse for å iterere over elementene i ordboken og sjekke om verdien samsvarer med den gitte verdien. Hvis en nøkkel blir funnet, legges den til en liste, og det første elementet i listen skrives ut som nøkkelen for den gitte verdien. Hvis verdien ikke finnes i ordboken, skrives det ut en melding som indikerer at den ikke ble funnet.
Trinn:
- Bruk elementmetoden i ordboken til å gå gjennom hvert nøkkelverdi-par i my_dict.
- Sjekk om verdien knyttet til gjeldende nøkkel er lik den gitte verdien.
- Hvis den er lik, legg til gjeldende nøkkel til en liste over nøkler.
- Hvis sløyfen fullføres uten å finne en samsvarende verdi, skriv ut en melding som indikerer at verdien ikke ble funnet.
- Hvis en samsvarende nøkkel ble funnet, skriv ut den første nøkkelen i listen.
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)>>0>:> >print>(>'The key for the value'>, value,>'is'>, key_list[>0>])> else>:> >print>(>'Value not found in dictionary'>)> |
>
>Produksjon
The key for the value 112 is Python>
Tidskompleksitet: O(N), hvor n er antall nøkkelverdi-par i ordboken.
Hjelpeområde: O(K) , hvor k er antall nøkler som samsvarer med den gitte verdien.
METODE 6:Bruke re modul
Programmet bruker re-modulen i Python for å finne nøkkelen i en ordbok som tilsvarer en gitt verdi. Den lager et regulært uttrykksmønster som samsvarer med verdien omgitt av ordgrenser, og bruker deretter next()-funksjonen til å iterere over elementene i ordboken og søke etter en verdi som samsvarer med mønsteret. Hvis en match blir funnet, returnerer programmet den tilsvarende nøkkelen.
ALGORITME:
- Lag et regulært uttrykksmønster som samsvarer med verdien vi leter etter, omgitt av ordgrenser.
- Bruk next()-funksjonen til å iterere over elementene i ordboken, og søke etter en verdi som samsvarer med mønsteret.
- Hvis en match blir funnet, returner den tilsvarende nøkkelen. Ellers returner ingen.
Python3
eksempel på java-kode
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)> |
>
>Produksjon
Java>
Tidskompleksitet: O(N), Å lage det regulære uttrykksmønsteret tar O(1) tid. Å søke etter en verdi som samsvarer med mønsteret i hvert ordbokelement tar O(n) tid i verste fall, der n er antall elementer i ordboken. Next()-funksjonen og if-setningen tar hver O(1)-tid. Derfor er den totale tidskompleksiteten til programmet O(n).
Hjelperom: O(1), Det regulære uttrykksmønsteret og nøkkelvariabelen krever hver O(1) plass. Mønstervariabelen og generatoruttrykket inne i next()-funksjonen krever begge O(1)-mellomrom. K- og v-variablene som brukes i generatoruttrykket krever ikke ekstra plass, siden de opprettes som en del av iterasjonen. Derfor er den generelle romkompleksiteten til programmet O(1).