295 votes

python dictionnaire et les valeurs par défaut

En supposant connectionDetails est un dictionnaire Python, ce qui est le meilleur, le plus élégant, le plus "pythonic" chemin de la refactorisation de code comme ceci:

if "host" in connectionDetails:
    host = connectionDetails["host"]
else:
    host = someDefaultValue

439voto

MattH Points 15352

Comme ceci:

host = connectionDetails.get('host','someDefault')

140voto

Tamerlaha Points 51

Vous pouvez également utiliser l' defaultdict comme:

from collections import defaultdict
a = defaultdict(lambda: "default", key="some_value")
a["blabla"] => "default"
a["key"] => "some_value"

32voto

Tim Pietzcker Points 146308

Alors qu' .get() est un beau langage, c'est plus lent que l' if/else (et plus lent que l' try/except si la présence de la clé dans le dictionnaire peut s'y attendre, la plupart du temps):

>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", 
... stmt="try:\n a=d[1]\nexcept KeyError:\n a=10")
0.07691968797894333
>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", 
... stmt="try:\n a=d[2]\nexcept KeyError:\n a=10")
0.4583777282275605
>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", 
... stmt="a=d.get(1, 10)")
0.17784020746671558
>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", 
... stmt="a=d.get(2, 10)")
0.17952161730158878
>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", 
... stmt="if 1 in d:\n a=d[1]\nelse:\n a=10")
0.10071221458065338
>>> timeit.timeit(setup="d={1:2, 3:4, 5:6, 7:8, 9:0}", 
... stmt="if 2 in d:\n a=d[2]\nelse:\n a=10")
0.06966537335119938

21voto

Jerome Baum Points 331

Pour plusieurs des valeurs par défaut différentes essayez ceci:

connectionDetails = { "host": "www.example.com" }
defaults = { "host": "127.0.0.1", "port": 8080 }

completeDetails = {}
completeDetails.update(defaults)
completeDetails.update(connectionDetails)
completeDetails["host"]  # ==> "www.example.com"
completeDetails["port"]  # ==> 8080

-3voto

Marcin Points 25366

(1) s'il vous Plaît réellement de lire la documentation python dans la profondeur suffisante pour avoir une idée de ce qu'il apporte.

(2) l'Utilisation defaultdict http://docs.python.org/library/collections.html#collections.defaultdict si le défaut est le même pour toutes les touches.

(3) dict.obtenez vous permet de définir une valeur par défaut: http://docs.python.org/library/stdtypes.html#mapping-types-dict

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