356 votes

Mappage sur des valeurs dans un dictionnaire python

Étant donné un dictionnaire je veux condition que je passe une fonction `` .

Y a-t-il un tel construit en fonction ? Ou que je dois faire

Idéalement, je voudrais juste écrire

ou

Autrement dit, peu importe pour moi si le dictionnaire original subit une mutation ou d’une copie est créée.

521voto

Martijn Pieters Points 271458

Il n'y a pas une telle fonction; la façon la plus simple pour ce faire est d'utiliser un dict compréhension:

my_dictionary = {k: f(v) for k, v in my_dictionary.items()}

En python 2.7, utilisez l' .iteritems() méthode de .items() pour économiser de la mémoire. Le dict de compréhension de la syntaxe n'étais pas introduit jusqu'à ce que python 2.7.

Notez qu'il n'existe pas de méthode sur les listes; vous auriez à utiliser une liste de compréhension ou de l' map() fonction.

En tant que tel, vous pouvez utiliser l' map() fonction pour le traitement de votre dict ainsi:

my_dictionary = dict(map(lambda (k,v): (k, f(v)), my_dictionary.iteritems()))

mais ce n'est pas lisible, vraiment.

41voto

Jesse Smith Points 430

Ces toolz sont parfaits pour ce type de logique simple et répétitif.

http://Toolz.readthedocs.org/en/latest/API.html#Toolz.dicttoolz.valmap

Obtenir de vous où vous voulez être à droite.

28voto

gens Points 28

Vous pouvez le faire sur place plutôt que de créer un nouveau dict, ce qui peut être préférable pour les grands dictionnaires (si vous n'avez pas besoin de copie).

 def mutate_dict(f,d):
    for k, v in d.iteritems():
        d[k] = f(v)

my_dictionary = {'a':1, 'b':2}
mutate_dict(lambda x: x+1, my_dictionary)
 

résultats en my_dictionary contenant:

 {'a': 2, 'b': 3}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X