Jeśli a mydict
nie jest puste, uzyskuję dostęp do dowolnego elementu jako:
mydict[mydict.keys()[0]]
Czy jest na to lepszy sposób?
python
dictionary
Stan
źródło
źródło
list(mydict.keys())[0]
.Odpowiedzi:
W Pythonie 3, nieniszczący i iteracyjny:
W Pythonie 2, nieniszczący i iteracyjny:
Jeśli chcesz, aby działał zarówno w Pythonie 2, jak i 3, możesz użyć
six
pakietu:choć w tym momencie jest to dość tajemnicze i wolałbym twój kod.
Jeśli chcesz usunąć dowolny element, wykonaj:
Zauważ, że „pierwszy” może nie być tutaj odpowiednim terminem, ponieważ
dict
nie jest uporządkowanym typem w Pythonie <3.6. Python 3.6+dicts
są zamawiane.źródło
dict.iterkeys().next()
?dict.values().__iter__().__next__()
:)key, value = dict(d).popitem()
Jeśli potrzebujesz tylko dostępu do jednego elementu (jest to pierwszy przypadek, ponieważ dyktaty nie gwarantują zamówienia), możesz to po prostu zrobić w Pythonie 2 :
Należy pamiętać, że (według mojej najlepszej wiedzy) Python nie gwarantuje, że 2 kolejne wywołania którejkolwiek z tych metod zwrócą listę z tą samą kolejnością. Nie jest to obsługiwane w Python3.
w Pythonie 3 :
źródło
list(my_dict.keys())[0]
list(my_dict.keys())[0]
nie jest leniwy?W python3 sposób:
zwróć wartość typu: dict_keys (), otrzymamy błąd, gdy otrzymamy 1. element klucza dict w ten sposób:
Na koniec przekonwertowałem dict.keys () na list @ 1st i uzyskałem 1. członka metodą łączenia list:
źródło
list(dict.values())[0]
.zdobyć klucz
uzyskać wartość
zdobyć oba
Pierwsze dwa to Python 2 i 3. Ostatnie dwa są leniwe w Pythonie 3, ale nie w Pythonie 2.
źródło
Jak wspomniano inni, nie ma „pierwszego elementu”, ponieważ słowniki nie mają gwarantowanej kolejności (są implementowane jako tabele skrótów). Jeśli chcesz na przykład wartość odpowiadającą najmniejszemu kluczowi,
thedict[min(thedict)]
zrobisz to. Jeśli zależy ci na kolejności, w jakiej klucze zostały wstawione, tzn. „Pierwszy” oznacza „wstawiony najwcześniej”, to w Pythonie 3.1 możesz używać kolekcji.OrDERDict , który jest również w nadchodzącym Pythonie 2.7; w przypadku starszych wersji Pythona pobierz, zainstaluj i użyj zamówionego backportu dict (2.4 i nowszych), który można znaleźć tutaj .Python 3.7 Teraz dyktanda są uporządkowane przy wstawianiu.
źródło
Co powiesz na to. Nie wspomniano tu jeszcze.
py 2 i 3
źródło
dict.values()
zwraca widok, więc powinno być O (1).list(a)
zwraca nową listę, więc byłoby O (n).Zignorowanie problemów związanych z kolejnością nagrań może być lepsze:
W ten sposób unikamy wyszukiwania elementów i generowania listy kluczy, których nie używamy.
Python3
źródło
next(iter(dict.values()))
uzyskać ten sam wynik bez tworzenia listy.W python3
źródło
Zawsze możesz zrobić:
To da ci konsekwentnie posortowany (w odniesieniu do wbudowanego .hash () chyba) zestaw kluczy, które możesz przetwarzać, jeśli sortowanie ma dla ciebie jakieś znaczenie. Oznacza to, że na przykład typy liczbowe są sortowane konsekwentnie, nawet jeśli rozszerzysz słownik.
PRZYKŁAD
Pamiętaj, że słownik jest sortowany po wydrukowaniu. Ale zestaw kluczy to w zasadzie skrót!
źródło
Zarówno dla Python 2, jak i 3:
źródło
Is there any better way to do this?
w skrócie.źródło
Brak bibliotek zewnętrznych, działa zarówno w Pythonie 2.7, jak i 3.x:
W przypadku klucza aribtrary po prostu pomiń .values ()
źródło
Podklasowanie
dict
jest jedną z metod, choć nieefektywną. Tutaj, jeśli podasz liczbę całkowitą, ona zwrócid[list(d)[n]]
, w przeciwnym razie uzyskaj dostęp do słownika zgodnie z oczekiwaniami:źródło