Python | Få nøkkel fra verdi i ordbok
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
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).