Sry, wenn diese Frage bereits existiert, aber ich habe schon seit einiger Zeit gesucht.
Ich habe ein Wörterbuch in Python, und ich möchte einige Werte daraus als Liste abrufen, aber ich weiß nicht, ob dies von der Implementierung unterstützt wird.
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
Aber kann ich das auf irgendeine Weise erreichen? In meinem Beispiel sieht es einfach aus, aber nehmen wir an, ich habe ein Wörterbuch mit 20 Einträgen und möchte 5 Schlüssel erhalten. Gibt es einen anderen Weg als zu tun
myDictionary.get('firstKey')
myDictionary.get('secondKey')
myDictionary.get('thirdKey')
myDictionary.get('fourthKey')
myDictionary.get('fifthKey')
python
dictionary
PKlumpp
quelle
quelle
Antworten:
Verwenden Sie eine
for
Schleife:keys = ['firstKey', 'secondKey', 'thirdKey'] for key in keys: myDictionary.get(key)
oder ein Listenverständnis:
[myDictionary.get(key) for key in keys]
quelle
[myDictionary[key] for key in keys]
, aber es wird nicht viel einfacher.[my_dict.get(x) for x in ['firstKey', 'secondKey', 'thirdKey']]
für eine einzeilige Lösung, aber das ist so kompakt wie möglich.if
Anweisung nachNone
Werten sucht, die von derget
Methode zurückgegeben werden:[mydict.get(key) for key in keys if key in mydict]
Hierfür gibt es bereits eine Funktion:
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.itemgetter
Verwenden Sie zum Übergeben einer Liste anBeachten Sie, dass
itemgetter
die Ausgabe nicht in ein Tupel eingeschlossen wird, wenn nur ein Schlüssel angefordert wird, und dass keine angeforderten Nullschlüssel unterstützt werden.quelle
g = itemgetter
. oOitemgetter
erfordert mindestens ein Argument. Wenn Sie also etwas Ähnliches tun möchtenitemgetter(*some_keys)(some_dict)
, schlägt dies fehl, wennsome_keys
es sich um eine leere Liste handelt.Niemand hat die
map
Funktion erwähnt, die es einer Funktion ermöglicht, eine Liste elementweise zu bearbeiten:mydictionary = {'a': 'apple', 'b': 'bear', 'c': 'castle'} keys = ['b', 'c'] values = list( map(mydictionary.get, keys) ) # values = ['bear', 'castle']
quelle
map
mit einer Liste versehen:values = list( map(mydictionary.get, keys) )
Sie können
At
von pydash verwenden :from pydash import at dict = {'a': 1, 'b': 2, 'c': 3} list = at(dict, 'a', 'b') list == [1, 2]
quelle
dict
im Beispiel einen besseren Namen für var zu wählen. Andernfalls wird der eingebautedict
Typ abgeschattet .Da ich hier keine ähnliche Antwort sehe, ist darauf hinzuweisen, dass Sie mit einem (Listen- / Generator-) Verständnis diese mehreren Werte entpacken und mehreren Variablen in einer einzigen Codezeile zuweisen können:
first_val, second_val = (myDict.get(key) for key in [first_key, second_key])
quelle
Wenn Sie
pandas
installiert haben, können Sie es in eine Reihe mit den Schlüsseln als Index verwandeln. Also so etwas wieimport pandas as pd s = pd.Series(my_dict) s[['key1', 'key3', 'key2']]
quelle
Wenn die Fallback-Tasten nicht zu viele sind, können Sie so etwas tun
value = my_dict.get('first_key') or my_dict.get('second_key')
quelle