2014-06-13 14 views
11

Sry, jeśli to pytanie już istnieje, ale już od dawna szukam.Słownik w języku Python uzyskuje wiele wartości

Mam słownik w Pythonie, a co chcę zrobić, to niektóre wartości z niego jako listy, ale nie wiem, czy jest to obsługiwane przez wdrożenie.

myDictionary.get('firstKey') # works fine 

myDictionary.get('firstKey','secondKey') 
# gives me a KeyError -> OK, get is not defined for multiple keys 
myDictionary['firstKey','secondKey'] # doesn't work either 

Ale czy jest jakiś sposób można to osiągnąć? W moim przykładzie wygląda to łatwo, ale załóżmy, że mam słownik 20 wpisów i chcę uzyskać 5 kluczy. Czy jest jakiś inny sposób niż robi

myDictionary.get('firstKey') 
myDictionary.get('secondKey') 
myDictionary.get('thirdKey') 
myDictionary.get('fourthKey') 
myDictionary.get('fifthKey') 

Odpowiedz

18

Użyj for pętlę:

keys = ['firstKey', 'secondKey', 'thirdKey'] 
for key in keys: 
    myDictionary.get(key) 

lub listy ze zrozumieniem:

[myDictionary.get(key) for key in keys] 
+0

ok już myślałem o tym, ale czy naprawdę nie ma wdrożony sposób? Mam na myśli, że to nie jest coś zupełnie nieparzystego, chyba – PKlumpp

+0

Jeśli jest zagwarantowane, że każdy klucz w kluczach znajduje się w słowniku, możesz napisać "[myDictionary [klucz] dla klucza w kluczach]", ale nie jest to o wiele prostsze niż że. – timgeb

+1

lub '[my_dict.get (x) dla x w ['firstKey', 'secondKey', 'thirdKey']]' dla rozwiązania z pojedynczą linią, ale jest to tak kompaktowe, jak to tylko możliwe. –

20

istnieje już funkcję dla tego:

from operator import itemgetter 

my_dict = {x: x**2 for x in range(10)} 

itemgetter(1, 3, 2, 5)(my_dict) 
#>>> (1, 9, 4, 25) 

itemgetter zwróci krotkę, jeśli przekazano więcej niż jeden argument. Aby przejść do listy itemgetter użyć

itemgetter(*wanted_keys)(my_dict) 
+0

Ja też tego nie wiedziałam, wygląda dobrze! –

+0

fajne rozwiązanie mimo to! – kmario23

+0

to jest fajne. nie jest tak krótki, jak się spodziewałem, ale miło wiedzieć;) – PKlumpp

1

Można użyć Atfrom pydash:

from pydash import at 
dict = {'a': 1, 'b': 2, 'c': 3} 
list = at(dict, 'a', 'b') 
list == [1, 2] 
Powiązane problemy