Usiłuję nakłonić mój program do wydrukowania "banana"
ze słownika. Jaki byłby najprostszy sposób to zrobić?
To jest mój słownik:
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3
}
python
dictionary
slagoy
źródło
źródło
to print out banana with a FOR loop, so when I run it, each key would also be printed out
Czy masz na myślifor k in prices: print k
? Spowoduje to wydrukowanie wszystkich kluczy w słowniku.Odpowiedzi:
W wersji w języku Python, w której dyktanda są faktycznie uporządkowane, możesz to zrobić
Aby zamówić dykty, potrzebujesz Python 3.7+ lub 3.6+, jeśli nie masz nic przeciwko poleganiu na technicznie szczegółowej implementacji szczegółów dykt w Pythonie 3.6.
We wcześniejszych wersjach Pythona nie ma „pierwszego klucza”.
źródło
next(iter( my_dict.items() ))
Słownik nie jest indeksowany, ale jest w pewien sposób uporządkowany. Poniższe dane dają pierwszy istniejący klucz:
źródło
list(my_dict)[0]
ponieważ i tak pobierze listę kluczy?Aktualizacja: od wersji Python 3.7 kolejność wstawiania jest zachowana, więc nie potrzebujesz
OrderedDict
tutaj. Możesz użyć poniższych podejść z normalnymdict
źródło
Python 3.6 i wcześniejsze *
Jeśli mówisz o zwykłym
dict
, to „pierwszy klucz” nic nie znaczy. Klucze nie są zamawiane w żaden sposób, na którym można polegać. Jeśli wykonasz iteracjędict
, prawdopodobnie nie dostaniesz"banana"
pierwszej rzeczy, którą zobaczysz.Jeśli chcesz zachować porządek, musisz użyć
OrderedDict
zwykłego słownika.Jeśli następnie chciałbyś zobaczyć wszystkie klucze w porządku, możesz to zrobić poprzez iterację
Możesz alternatywnie umieścić wszystkie klucze na liście, a następnie pracować z tym
Szybszym sposobem na uzyskanie pierwszego elementu bez tworzenia listy byłoby wywołanie
next
iteratora. To jednak nie uogólnia się przy próbie uzyskanianth
elementu* CPython miał gwarantowaną kolejność wstawiania jako szczegół implementacji w 3.6.
źródło
Dla Python 3 poniżej eliminuje narzut związany z konwersją list:
źródło
dict
Typ jest nieuporządkowana mapowanie, więc nie ma czegoś takiego jak „pierwszy” elementu.Prawdopodobnie chcesz tego
collections.OrderedDict
.źródło
Znalazłem więc tę stronę, próbując zoptymalizować rzecz, biorąc jedyny klucz w słowniku o znanej długości 1 i zwracając tylko klucz. Poniższy proces był najszybszy dla wszystkich słowników, które wypróbowałem do rozmiaru 700.
Wypróbowałem 7 różnych podejść i okazało się, że ten był najlepszy na moim MacBooku 2014 z Python 3.6:
Wyniki ich profilowania były następujące:
Wszystkie podejścia, które próbowałem, są tutaj:
źródło
Według mnie odpowiedź będzie prosta
first = list(prices)[0]
przekonwertowanie słownika na listę wygeneruje klucze, a my wybierzemy pierwszy klucz z listy.
źródło
next(iter(prices))
, jak już sugerują inne odpowiedzi.Jak wielu innych zauważyło, w słowniku nie ma pierwszej wartości. Sortowanie w nich jest dowolne i nie można liczyć na to, że sortowanie będzie takie samo przy każdym dostępie do słownika. Jeśli jednak chcesz wydrukować klucze na kilka sposobów:
Ta metoda używa przypisania krotek, aby uzyskać dostęp do klucza i wartości. Jest to przydatne, jeśli z jakiegoś powodu musisz uzyskać dostęp zarówno do klucza, jak i do wartości.
To daje dostęp tylko do kluczy, jak
keys()
sugeruje metoda.źródło
d.keys () [0], aby uzyskać indywidualny klucz.
Aktualizacja: @AlejoBernardin, nie jestem pewien, dlaczego powiedziałeś, że to nie działa. tutaj sprawdziłem i zadziałało. importuj kolekcje
źródło
dict.keys()
zwraca'dict_keys' object
zamiast zamiast alist
, który nie obsługuje indeksowania.Użyj pętli for, która obejmuje wszystkie klucze w
prices
:Upewnij się, że zmieniłeś
prices.items()
na,prices.iteritems()
jeśli używasz Python 2.xźródło
Jeśli chcesz tylko pierwszy klucz ze słownika, powinieneś użyć tego, co wielu sugerowało wcześniej
Jednak jeśli chcesz pierwszy i zachować resztę jako listę, możesz użyć operatora rozpakowywania wartości
To samo ma zastosowanie w sprawie wartości, zastępując
prices
zprices.values()
i zarówno dla klucza i wartości można nawet użyć rozpakowywania zadanieźródło
najprostszym sposobem jest:
ale czasami powinieneś być bardziej ostrożny i upewnić się, że twoja istota jest cenną listą, więc:
źródło
TypeError: 'dict_keys' object is not subscriptable
, przynajmniej w Pythonie 3.8