web-dev-qa-db-fra.com

Le dictionnaire Python a plusieurs valeurs

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')
18
PKlumpp

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]
25
ComputerFellow

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)
32
Veedrac

Vous pouvez utiliser Atde pydash :

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

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)      
0
CbeDroid1614

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')
0
Mux