Chciałbym wydrukować określony klucz słownika Python:
mydic = {}
mydic['key_name'] = 'value_name'
Teraz mogę sprawdzić, czy mydic.has_key('key_name')
, ale chciałbym wydrukować nazwę klucza 'key_name'
. Oczywiście, że mógłbym użyć mydic.items()
, ale nie chcę, aby wszystkie klucze były wymienione, tylko jeden konkretny klucz. Na przykład oczekiwałbym czegoś takiego (w pseudokodzie):
print "the key name is", mydic['key_name'].name_the_key(), "and its value is", mydic['key_name']
Czy istnieje name_the_key()
metoda wydrukowania nazwy klucza?
Edycja:
OK, dziękuję bardzo za wasze reakcje! :) Zdaję sobie sprawę, że moje pytanie nie jest dobrze sformułowane i trywialne. Właśnie się pomyliłem, ponieważ zdałem sobie sprawę, że nazwa_klucza mydic['key_name']
to dwie różne rzeczy i pomyślałem, że niepoprawne byłoby wydrukowanie key_name
poza kontekstem słownika. Ale rzeczywiście mogę po prostu użyć „nazwa_klucza”, aby odnieść się do klucza! :)
źródło
Odpowiedzi:
Słownik ma z definicji dowolną liczbę kluczy. Nie ma „klucza”. Masz
keys()
metodę, która daje pythonlist
wszystkich kluczy, i masziteritems()
metodę, która zwraca pary klucz-wartość, więcWersja Python 3:
Więc masz uchwyt na klawiszach, ale one naprawdę mają sens tylko w połączeniu z wartością. Mam nadzieję, że zrozumiałem twoje pytanie.
źródło
.iteritems()
nie jest już obsługiwany ....items()
. Dodałem przykład.items()
zwraca listę w python 2.x.Dodatkowo możesz użyć ....
źródło
Hmm, myślę, że możesz chcieć wydrukować wszystkie klucze w słowniku i odpowiadające im wartości?
Jeśli tak, chcesz:
Upewnij się, że używasz również „+” zamiast „”. Przecinek umieści każdy z tych elementów w osobnej linii, myślę, że jako plus umieści je w tej samej linii.
źródło
"is"
ikey
itp. Jeśli używasz+
, musisz wstawić dodatkowe dopełnienie do łańcuchów. Również klucz i wartość niekoniecznie są łańcuchami, w którym to przypadku przecinek użyje str (klucz) i str (wartość), a+
spowoduje błądUwaga: W Pythonie 3 zmieniono nazwę dic.iteritems () na dic.items ()
źródło
Nazwa klucza „nazwa_klucza” to nazwa_klucza
print 'key_name'
lub dowolna zmienna, którą reprezentujesz.źródło
W Pythonie 3:
źródło
Ponieważ wszyscy próbujemy odgadnąć, co może oznaczać „wypisz klucz”, postaram się to zrobić. Być może potrzebujesz funkcji, która pobiera wartość ze słownika i znajduje odpowiedni klucz? Odwrotne wyszukiwanie?
Zauważ, że wiele kluczy może mieć tę samą wartość, więc ta funkcja zwróci jakiś klucz o wartości, być może nie taki, jaki chciałeś.
Jeśli musisz to robić często, warto zbudować słownik odwrotny:
źródło
iteritems
naitems
, to jak pierwotnie pokazano, odpowiedź zwróci tylko pierwszy klucz - jeśli istnieje wiele dopasowań. Aby rozwiązać ten problem, utwórz pustą listę przedfor loop
(values_list = []
), a następnie dodaj klucze do tej listy (values_list.append(k)
) wif
pętli. Na koniec przenieś instrukcję return (return values_list
) pozafor
pętlę.Możesz to zrobić w ten sposób:
źródło
Edycja: Zaktualizowano dla f-stringów Pythona 3 ...
źródło
Upewnij się, że zrobisz
źródło
Co jest złego w używaniu
'key_name'
zamiast tego, nawet jeśli jest to zmienna?źródło
źródło
źródło
Prawdopodobnie najszybszy sposób na odzyskanie tylko nazwy klucza:
Wynik:
Konwertuje
dictionary
na alist
następnie wyświetla pierwszy element, który jest całością,dict
a następnie wyświetla pierwszą wartość tego elementu, który jest:key_name
źródło
Odszukałem to pytanie, ponieważ chciałem wiedzieć, jak odzyskać nazwę „klucza”, jeśli mój słownik ma tylko jeden wpis. W moim przypadku klucz był mi nieznany i może być dowolną liczbą rzeczy. Oto, co wymyśliłem:
źródło
Spróbuj tego:
źródło
źródło
Jeśli chcesz uzyskać klucz o pojedynczej wartości, pomocne byłyby następujące czynności:
W pythonowy sposób:
źródło
Dodaję tę odpowiedź jako jedną z innych odpowiedzi tutaj ( https://stackoverflow.com/a/5905752/1904943 ) jest datowana (Python 2;
iteritems
), a przedstawiony kod - jeśli jest aktualizowany dla Python 3 zgodnie z sugerowanym obejście w komentarzu do tej odpowiedzi - po cichu nie zwraca wszystkich istotnych danych.tło
Mam pewne dane metaboliczne, przedstawione na wykresie (węzły, krawędzie, ...). W słownikowej reprezentacji tych danych klucze mają postać
(604, 1037, 0)
(reprezentującą węzeł źródłowy i docelowy oraz typ krawędzi), z wartościami formy5.3.1.9
(reprezentującymi kody enzymów EC).Znajdź klucze dla podanych wartości
Poniższy kod poprawnie znajduje moje klucze, podając wartości:
podczas gdy ten kod zwraca tylko pierwszy (z kilku możliwych pasujących) kluczy:
Ten ostatni kod, naiwnie aktualizowane wymianie
iteritems
zitems
, nie zwróci(604, 3936, 0), (1037, 3936, 0
.źródło
Aby uzyskać dostęp do danych, musisz to zrobić:
Lub, aby uzyskać dostęp do wartości, którą po prostu wywołujesz z klucza:
foo[bar]
źródło