Lorsque l’on fait du preprocessing sur les données en Python, il est utile de transformer des structures de données en d’autres.
Voici quelques snippets utiles:

Liste vers dictionnaire¶

1
2
3
4
5
list = ["lun", "mer", "mar", "mer", "jeu", "jeu"]
dict = {}
for el in list:
dict[e] = dict.get(el, 0) + 1
print(dict)
1
{'lun': 1, 'mer': 2, 'mar': 1, 'jeu': 2}

L’usage de la méthode get regarde si une clé appartient au dictionnaire, retourne la valeur associée ou une valeur par défault dans le cas contraire.

Sans utiliser cette méthode, le code précédent devient:

1
2
3
4
5
6
7
8
list = ["lun", "mer", "mar", "mer", "jeu", "jeu"]
dict = {}
for el in list:
if el in dict:
dict[el] += 1
else:
dict[el] = 1
print(dict)

Dictionnaire vers liste

1
2
3
4
5
6
dict = {'lun': 1, 'mer': 2, 'mar': 1, 'jeu': 2}
list = []
for key, value in dict.items():
for i in range(value):
list.append(key)
print(list)
1
["lun", "mer", "mar", "mer", "jeu", "jeu"]

Dictionnaire vers 2 listes

1
2
3
4
5
6
7
8
9
dict = {'lun': 1, 'mer': 2, 'mar': 1, 'jeu': 2}
keys = []
values = []
for key, value in dict.items():
keys.append(key)
values.append(value)

print(keys)
print(values)
1
2
['mer', 'jeu', 'lun', 'mar']
[2, 2, 1, 1]

2 listes vers 1 dictionnaire

1
2
3
keys, values = ['mer', 'jeu', 'lun', 'mar'], [2, 2, 1, 1]
dict = {x:y for x, y in zip(keys, values)}
print(dict)
1
{'lun': 1, 'mer': 2, 'mar': 1, 'jeu': 2}

Dictionnaire vers 2 listes

1
2
3
4
5
6
7
8
dict = {'lun': 1, 'mer': 2, 'mar': 1, 'jeu': 2}
keys = []
values = []
for key, value in dict.items():
keys.append(k)
values.append(v)
print(keys)
print(values)
1
2
['mer', 'jeu', 'lun', 'mar']
[2, 2, 1, 1]

Avec le zip reverse cela devient:

1
2
3
4
dict = {'lun': 1, 'mer': 2, 'mar': 1, 'jeu': 2}
keys, values = zip(*dict.items())
print(keys)
print(values)
1
2
('mer', 'jeu', 'lun', 'mar')
(2, 2, 1, 1)