Dictionnaire
Rédigé par Paulo
Aucun commentaire
Classé dans : Python
Récupérer une clé si on ne sait pas si elle est présente :
#recupere la cle si elle existe sinon affectation de la 'val par défaut' val = dico.get('cle', 'valeur par defaut') #recupere la cle si elle existe sinon creation de la cle + affectation val = dico.setdefault('cle', valeur)
Best practice sur la création de dictionnaire en python :
-
plutot que :
dico = {} if "list" not in dico: dico"list"] = [] dico["list"].append("list_item")
-
preferer 'setdefault'
dico = {} dico.setdefault("list", []).append("list_item")
-
autre exemple :
#création éventuelle de clés/dictionnaire # si les clés 'disk' et/ou 'mount_list' n'existent pas la command ci-dessous les crées # en leur assignant un dictionnaire serveur = {} mount_list = config['serveur'].setdefault('disk', {}).setdefault('mount_list', {}) #idem pour la lecture : #si on a créé/renseigné le dico config['serveur']['disk'] alors disk récupère la valeure #sinon disk sera un dictionnaire vide (évite le plantage) disk = config['serveur'].get('disk', {}) #idem pour mount_disk qui récupère ou pas la valeure du dico mount_list = disk.get('mount_list', {})
-
encore mieux : chargement d'un dico - (source : http://www.saltycrane.com/blog/2010/02/python-setdefault-example/)
#chargement a partir d'un tableau de tuples DATA_SOURCE = (('key1', 'value1'), ('key1', 'value2'), ('key2', 'value3'), ('key2', 'value4'), ('key2', 'value5'),) #definition du dico et chargement depuis le tableau de tuples newdata = {} for k, v in DATA_SOURCE: if newdata.has_key(k): newdata[k].append(v) else: newdata[k] = [v] print newdata
-
un peu pareil mais mieux car plus court...- (source : http://www.saltycrane.com/blog/2010/02/python-setdefault-example/)
#on utilise toujours le tableau de tupls (ci-dessus) newdata = {} #mais on charge directment le dico for k, v in DATA_SOURCE: newdata.setdefault(k, []).append(v) print newdata
-
compréhension de dictionnaire :
# creation d'un dico si la cle possede une valeur (c pas clair ça...) vg = dict((k, v) for (k,v) in { 'ensure': 'present', 'physical_volumes': pv, 'pesize': pesize }.iteritems() if v) #création d'un dictionnaire depuis un fichier ... #genre cat fic.param client_id=148745 client_secret=e855bc4551afc587452588f808 access_token=3c11cb8004300b8db021bd9bf31cd42ad #en fait on split sur '=', cle = premier champ, val = deuxieme champ : kool !!!! dic = { p.strip().split('=')[0] : p.strip().split('=')[1] for p in open('fic.param').readlines()}
-
fichier ini en dictionnaire :
# création d'un dictionnaire depuis un fichier ini # fichier du genre : # [Raoul] # name = toto # surname = titi # age = 99 # [Volfoni] # name = toto # surname = titi # age = 66 # rappel : utilisation de ConfigParser pour lire le fichier .ini # config = ConfigParser.ConfigParser() # config.readfp(open(conf_file)) # on transforme toutes les sections en dictionnaire # premiere méthode dic = {} for s in config.sections(): dic[s] = dict((k,v) for (k,v) in config.items(s)) # deuxieme méthode dic = {s : dict(config.items(s)) for s in config.sections()}