157 Stimmen

Wie man mehrere Wörterbuchwerte erhält?

Ich habe ein Wörterbuch in Python, und was ich tun möchte, ist einige Werte als Liste daraus zu erhalten, aber ich weiß nicht, ob dies von der Implementierung unterstützt wird.

myDictionary.get('ersterSchlüssel')   # funktioniert gut

myDictionary.get('ersterSchlüssel','zweiterSchlüssel')
# wirft KeyError -> OK, get ist nicht für mehrere Schlüssel definiert
myDictionary['ersterSchlüssel','zweiterSchlüssel']   # funktioniert auch nicht

Gibt es einen Weg, dies zu erreichen? In meinem Beispiel sieht es einfach aus, aber sagen wir, ich habe ein Wörterbuch mit 20 Einträgen und ich möchte 5 Schlüssel abrufen. Gibt es einen anderen Weg, als das Folgende zu tun?

myDictionary.get('ersterSchlüssel')
myDictionary.get('zweiterSchlüssel')
myDictionary.get('dritterSchlüssel')
myDictionary.get('vierterSchlüssel')
myDictionary.get('fünfterSchlüssel')

181voto

Veedrac Punkte 54089

Es gibt bereits eine Funktion dafür:

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 gibt ein Tupel zurück, wenn mehr als ein Argument übergeben wird. Um eine Liste an itemgetter zu übergeben, verwende

itemgetter(*wanted_keys)(my_dict)

Bitte beachte, dass itemgetter sein Ergebnis nicht in ein Tupel einpackt, wenn nur ein Schlüssel angefordert wird, und keine null Schlüssel unterstützt werden.

112voto

ComputerFellow Punkte 11672

Verwenden Sie eine for-Schleife:

keys = ['ersterSchlüssel', 'zweiterSchlüssel', 'dritterSchlüssel']
for key in keys:
    myDictionary.get(key)

oder eine Listenabstraktion:

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

68voto

scottt Punkte 869

Ich würde die sehr nützliche map Funktion empfehlen, die es einer Funktion ermöglicht, elementweise auf eine Liste zu wirken:

mydictionary = {'a': 'apple', 'b': 'bear', 'c': 'castle'}
keys = ['b', 'c']

values = list( map(mydictionary.get, keys) )

# values = ['bear', 'castle']

13voto

bustawin Punkte 595

Sie können At aus pydash verwenden:

from pydash import at
my_dict = {'a': 1, 'b': 2, 'c': 3}
my_list = at(my_dict, 'a', 'b')
my_list == [1, 2]

10voto

Epion Punkte 488

Da hier keine ähnliche Antwort zu sehen ist, lohnt es sich zu erwähnen, dass Sie mit der Verwendung einer (Liste / Generator) -Comprehension diese mehrfachen Werte entpacken und in einer einzigen Codezeile mehreren Variablen zuweisen können:

first_val, second_val = (myDict.get(key) for key in [first_key, second_key])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X