Czy istnieje wbudowany / szybki sposób użycia listy kluczy do słownika w celu uzyskania listy odpowiednich pozycji?
Na przykład mam:
>>> mydict = {'one': 1, 'two': 2, 'three': 3}
>>> mykeys = ['three', 'one']
Jak mogę użyć, mykeys
aby uzyskać odpowiednie wartości w słowniku jako listę?
>>> mydict.WHAT_GOES_HERE(mykeys)
[3, 1]
python
list
dictionary
key
FazJaxton
źródło
źródło
mydict
jest wywołaniem funkcji (która zwraca dict), to wywołuje funkcję wiele razy, prawda?Kilka innych sposobów niż list-comp:
map(mydict.__getitem__, mykeys)
None
kluczem if not found:map(mydict.get, mykeys)
Alternatywnie użycie
operator.itemgetter
może zwrócić krotkę:Uwaga : w Pythonie3
map
zwraca iterator zamiast listy. Użyjlist(map(...))
dla listy.źródło
Małe porównanie prędkości:
Zrozumienie listy i tworzenie elementów to najszybsze sposoby na zrobienie tego.
AKTUALIZACJA: W przypadku dużych losowych list i map miałem nieco inne wyniki:
Więc w tym przypadku oczywiste jest zwycięzcą
f = operator.itemgetter(*l); f(m)
, a jasne outsider:map(lambda _: m[_], l)
.UPDATE for Python 3.6.4:
Zatem wyniki dla Pythona 3.6.4 są prawie takie same.
źródło
Oto trzy sposoby.
Podnoszenie,
KeyError
gdy nie znaleziono klucza:Domyślne wartości brakujących kluczy.
Pomijanie brakujących kluczy.
źródło
found_keys = mapping.keys() & iterable
dajeTypeError: unsupported operand type(s) for &: 'list' and 'list'
na Pythonie 2.7; `found_keys = [klucz do klucza w mapping.keys () jeśli klucz jest iterowalny] działa najlepiejSpróbuj tego:
źródło
Spróbuj tego:
źródło
items()
jest preferowana, nie musi wykonywać dodatkowego wyszukiwania, nie malen(mydict)*len(mykeys)
tu żadnej operacji! (zauważ, że używam zestawu)mykeys
jest amortyzowana przez cały czas, używam zestawu, a nie listyźródło
Pandy robią to bardzo elegancko, chociaż często składane listy zawsze będą bardziej technicznie Pythonowe. Nie mam teraz czasu na porównanie prędkości (wrócę później i wstawię):
źródło
Lub po prostu
mydict.keys()
To jest wbudowane wywołanie metody dla słowników. Przeglądaj takżemydict.values()
imydict.items()
.// Ah, post OP mnie zdezorientował.
źródło
Po zamknięciu Pythona: skuteczny sposób tworzenia listy z wartości dyktowania w zadanej kolejności
Pobieranie kluczy bez budowania listy:
Wyjście:
Który pasuje do kolejności podanej na liście
źródło
o ile nie ma kluczy w dyktandzie.
źródło