Próbuję uzyskać dostęp do elementu dict_key przez jego indeks:
test = {'foo': 'bar', 'hello': 'world'}
keys = test.keys() # dict_keys object
keys.index(0)
AttributeError: 'dict_keys' object has no attribute 'index'
Chcę dostać foo
.
tak samo z:
keys[0]
TypeError: 'dict_keys' object does not support indexing
W jaki sposób mogę to zrobić?
python
dictionary
python-3.x
key
fj123x
źródło
źródło
dict.keys()
zwraca zestaw, taki jak obiekt widoku, a nie lista (więc indeksowanie nie jest możliwe). Użyjkeys = list(test)
collections.OrderedDict
jeśli chcesz zamówić klucze)Odpowiedzi:
list()
Zamiast tego zadzwoń do słownika:W Pythonie 3
dict.keys()
metoda zwraca obiekt widoku słownika , który działa jak zestaw. Iterowanie bezpośrednio po słowniku również daje klucze, więc przekształcenie słownika w listę powoduje wyświetlenie listy wszystkich kluczy:źródło
dict
podklasy, na przykład, gdzie.keys()
jest obsługiwany w kodzie Pythona (np. Może nastąpić przełączenie wątku).sorted(dict)
zrobiłby dokładnie to samo; tworzy listę kluczy w posortowanej kolejności.list(dict)
wyświetli listę w kolejności słownikowej.keys = [*test]
Nie jest to pełna odpowiedź, ale być może przydatna wskazówka. Jeśli to naprawdę pierwszy przedmiot, który chcesz *, to
jest znacznie szybszy niż
dla dużych dykt, ponieważ całość nie musi być przechowywana w pamięci.
Dla 10 000 000 pozycji okazało się, że jest to prawie 40 000 razy szybsze.
* Pierwsza pozycja w przypadku, gdy dict jest tylko pseudolosowym elementem przed Pythonem 3.6 (później jest uporządkowany w standardowej implementacji, chociaż nie zaleca się na nim polegać).
źródło
Chciałem pary „klucz” i „wartość” pierwszego elementu słownika. Użyłem następującego kodu.
źródło
Konwencjonalny sposób dołączania kluczy do statycznie zdefiniowanej listy, a następnie indeksowania jej dla tego samego
źródło
ls = list(test.keys())
? Uważam to za prostsze.W wielu przypadkach może to być problem XY . Dlaczego indeksujesz klucze słownika według pozycji? Czy naprawdę potrzebujesz? Do niedawna słowniki nie były nawet porządkowane w Pythonie, więc dostęp do pierwszego elementu był dowolny.
Właśnie przetłumaczyłem kod Pythona 2 na Python 3:
co nie jest ładne, ale też niezbyt złe. Na początku miałem zamiar go zastąpić potwornym
zanim zdałem sobie sprawę, że to wszystko jest znacznie lepiej napisane jako
który działa dobrze.
Uważam, że w wielu innych przypadkach można uniknąć indeksowania kluczy słownika według pozycji. Chociaż słowniki są uporządkowane w Pythonie 3.7, poleganie na tym nie jest ładne. Powyższy kod działa tylko dlatego, że zawartość
some_list
została niedawno utworzona na podstawie zawartościd
.Przyjrzyj się dokładnie swojemu kodowi, jeśli naprawdę potrzebujesz dostępu do
disk_keys
elementu według indeksu. Być może nie musisz.źródło
Spróbuj tego
Wynik wygląda następująco. [„foo”, „cześć”]
Więcej możliwych rozwiązań znajdziesz tutaj .
źródło