Sry si cette question existe déjà, mais je cherche depuis un certain temps maintenant.
J'ai un dictionnaire en python, et ce que je veux faire, c'est en faire une liste de valeurs, mais je ne sais pas s'il est supporté par l'implémentation.
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
Mais est-ce que je peux y arriver? Dans mon exemple, cela semble facile, mais disons que j'ai un dictionnaire de 20 entrées et que je veux obtenir 5 clés. Y a-t-il un autre moyen que de faire
myDictionary.get('firstKey')
myDictionary.get('secondKey')
myDictionary.get('thirdKey')
myDictionary.get('fourthKey')
myDictionary.get('fifthKey')
Utilisez une boucle for
:
keys = ['firstKey', 'secondKey', 'thirdKey']
for key in keys:
myDictionary.get(key)
ou une liste de compréhension:
[myDictionary.get(key) for key in keys]
Il existe déjà une fonction pour cela:
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
retournera un tuple si plus d'un argument est passé. Pour passer une liste à itemgetter
, utilisez
itemgetter(*wanted_keys)(my_dict)
Vous pouvez utiliser At
de pydash :
from pydash import at
dict = {'a': 1, 'b': 2, 'c': 3}
list = at(dict, 'a', 'b')
list == [1, 2]
Utilisez la compréhension de liste et créez une fonction:
def myDict(**kwargs):
# add all of your keys here
keys = ['firstKey','secondKey','thirdKey','fourthKey']
# iterate through keys
# return the key element if it's in kwargs
list_comp = ''.join([val for val in keys if val in kwargs ])
results = kwargs.get(list_comp,None)
print(results)
Si les clés de secours ne sont pas trop nombreuses, vous pouvez faire quelque chose comme ceci.
value = my_dict.get('first_key') or my_dict.get('second_key')