[Python] : le point sur les dictionnaires et ne pas confondre avec la liste

Print Friendly, PDF & Email

Actuellement, c’est un des points qui m’ennerve le plus sur Python : les dictionnaires, les listes et les tuples. Quand je crois avoir bien retenu qui est qui et bien je me remélange les pinceaux et je dois me refaire le point régulièrement. Alors lorsque quelqu’un me reparle de “tableau de hashage” et de “nested list” j’en oublie les dictionnaires.

Alors, ce n’est que mon avis, mais en python oubliez les tuples. C’est peu utilisé et il y a assez à faire avec les 2 autres.

Quelques rappels sur les dictionnaires

dico = {
  clef:valeur,
  clef:valeur,
  clef:valeur,
}


Donc un tableau de hashage comme certains appellent cela.

Un exemple ?

age_personne = {
  'Xavki':'32',
  'Pierre':'40',
  'Paul':'53',
  'Jacques':'60',
}

ou

age_personne = dict(
  Xavki='32',
  Pierre='40',
  Paul='53',
  Jacques='60',
)


Contrairement au liste on ne peut pas appeler une clé/valeur par son index mais par sa clef :

>>> age_personne[1]
Traceback (most recent call last):
  File "", line 1, in 
KeyError: 1

>>> age_personne['Xavki']
'32'


et pour entrer une valeur ou mettre à jour une valeur :

age_personne['Xavki']=62
>>> age_personne
{'Xavki': 62, 'Paul': '53', 'Pierre': '40', 'Jacques': '60'}


Et mes listes ?

Alors comment reproduire le système de clef des listes ? faire en sorte que la clef soit un indice :

age_personne = {
  '1':'32',
  '2':'40',
  '3':'53',
  '4':'60',
}


Mais attention pas de slice comme dans les listes (c’est à dire d’utiliser des range d’index) et pas de append possible.

Pour le pratico pratique vous pouvez faire mieux avec les dictionnaires en y imbriquant des listes :

age_personne = dict(
Xavki=['32','informaticien','Paris'],
Pierre=['40','manager','Tours'],
Paul=['52','rh','Toulouse'],
Jacques=['63','informaticien','Paris'],
)


et là…. surprise :

>>> age_personne['Xavki']
['32', 'informaticien', 'Paris']

>>> age_personne['Xavki'][1]
'informaticien'


C’est plus kool déjà.

Et en plus on peut utiliser des actions spécifiques :

#on demande les résultats d'une clef avec get
>>> age_personne.get('Xavki')
['32', 'informaticien', 'Paris']

#on vide le dictionnaire
age.personne.clear()

#on transforme un dictionnaire en "nested lit"
liste_age=list(age_personne.items())

#on met dans une liste toutes les clefs
list(age_personne.keys())

#pareil sur les valeurs
list(age_personne.values())

#on supprime une clef
age_personne.pop('Xavki')


Comment alimenter simplement une liste ?

Découvrez  [Python] : un mot sur les listes ? boucles for...

Soit on la créé avec des données que l’on peut entrer à la main facilement (en nombre limitées) :

maliste = [1,2,3,4,5]

Sinon on peut aussi utiliser les boucles for pour le faire :

For i in range(1,5):  maliste.append(i)

Ou encore lorsque l’on veut faire court et efficace :

maliste = [ i for i in range(1,5) ]

La dernière méthode est ma préférée pour éviter de mutliplier le nombre de lignes dans les scripts.

A votre tour de vous amuser. Avez vous des choses à ajouter ?