Dictionnaire

Rédigé par Paulo Aucun commentaire
Classé dans : Python Mots clés : dico

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 :

  1. plutot que :
    dico = {}
    
    if "list" not in dico:
        dico"list"] = []
    
    dico["list"].append("list_item")

     

  2. preferer 'setdefault'

    dico = {}
    
    dico.setdefault("list", []).append("list_item")

     

  3. 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', {})
    
    
    

     

  4. 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
    

     

  5. 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

     

  6. 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()}


     

  7. 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()}
    
    
    

     

     

Les commentaires sont fermés.