W języku python mam następujący słownik:
d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'}
Potrzebuję sposobu, aby sprawdzić, czy wartość taka jak „jeden” lub „dwa” istnieje w tym słowniku.
Na przykład, jeśli chciałbym wiedzieć, czy istnieje indeks „1”, musiałbym po prostu wpisać:
"1" in d
A potem python powiedziałby mi, czy to prawda, czy fałsz, jednak muszę zrobić to samo dokładnie, z wyjątkiem sprawdzenia, czy istnieje wartość.
python
dictionary
find
JimmyK
źródło
źródło
d
, czasy są praktycznie bez znaczenia. W Pythonie 3dict.values()
jest domyślnie widokiem słownikadict.itervalues()
idict.viewvalues()
już go nie ma. Możesz to przetestować ponownie (z większym słownikiem) i użyć,list(d.values())
aby uzyskać zachowanie Python 2 iiter(d.values())
uzyskać takiedict.itervalues()
zachowanie, ale ponieważ obie wersje wymagają globalnego wyszukiwania i wywoływania, będą one absolutnie wolniejsze. Obaj wykonują dodatkową pracę, która nie jest potrzebna.Możesz użyć
aby sprawdzić, czy
"one"
należy do wartości Twojego słownika.źródło
Słownik Pythona ma funkcję (klucz)
Na przykład,
Jeśli twój klucz nie istnieje, zwróci
none
wartość.Treść odpowiednia dla wersji mniejszych niż 3.0 i większych niż 5.0. .
źródło
key:value
a nie klucz.Użyj widoków słownika:
źródło
Istnieją różne typy sprawdzania wartości
Co jeśli lista wartości
Co jeśli lista wartości z wartościami ciągu
źródło
value in [... list comprehension over sequence ...]
, używajany(value in sequence ...)
, aby uniknąć utworzenia obiektu listy, którego nie użyjesz do niczego innego, i do zwierania, gdy wartość zostanie znaleziona.W Pythonie 3 możesz użyć
values()
funkcji słownika. Zwraca obiekt widoku wartości. To z kolei może zostać przekazane doiter
funkcji, która zwraca obiekt iteratora. Iterator można sprawdzić za pomocąin
, jak to,Lub możesz użyć obiektu widoku bezpośrednio, ponieważ jest on podobny do listy
źródło
iter()
w słowniku widzenia;in
użyje już obiektu jako iterowalnego (typ nie implementuje dedykowanej__contains__
metody). Jedyna różnica między'one' in iter(d.values())
i'one in d.values()
polega na tym, że Python wykonał dodatkową pracę (ponosząc koszty globalnego wyszukiwaniaiter
).