bistouille | add est une méthode de set, c'est l'équivalent de append pour les listes.
L'avantage avec un set est le dédoublonnage automatique.
En plus je viens de me rendre compte qu'avec les valeurs uniques, mon script va merdouiller, puisque en supprimant, il y aura un décalage d'index, donc faudra modifier en conséquence.
Si tu n'as pas de possibilité d'utiliser un client sgbd lourd, il existe sqlite dispo en standard dans pyton, c'est léger et portable.
Tu peux au pire créer une bbd, effectuer tes requêtes, et supprimer la bdd, un sgbdr sera toujours plus performant pour faire ce genre de comparaisons qu'un script python.
Un test rapide avec tes valeurs :
Code :
- import sqlite3
- dico = {'Dujardin':[('Jean', 48, 180),
- ('Pierre', 64, 164),
- ],
- 'Lelouche':[('Gilles', 48, 180),
- ('Claude', 64, 164),
- ('Pierre', 64, 164),
- ],
- }
-
- connexion = sqlite3.connect('personnes.db')
- cur = connexion.cursor()
- table = """
- CREATE TABLE PERSONNES(
- id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
- nom VARCHAR(255) NOT NULL,
- prenom VARCHAR(255) NOT NULL,
- age INT NOT NULL,
- taille INT NOT NULL
- )
- """
- cur.execute(table)
- connexion.commit()
- for nom, attributs in dico.items() :
- for proprietes in attributs :
- prenom, age, taille = proprietes
- cur.execute('INSERT INTO PERSONNES(nom, prenom, age, taille) VALUES(?, ?, ?, ?)', (nom, prenom, age, taille))
- connexion.commit()
- selectDoublons = """
- SELECT id, nom, prenom, age, taille
- FROM PERSONNES
- WHERE prenom || age || taille
- IN
- (SELECT prenom || age || taille
- FROM PERSONNES
- GROUP BY prenom, age, taille
- HAVING COUNT(*) > 1
- )
- ORDER BY prenom, age, taille
- """
- cur.execute(selectDoublons)
- donnees = cur.fetchall()
- for valeurs in donnees :
- print(valeurs)
|
Bon je suis rouillé en sql, y'a sûrement moyen de faire mieux, et pour récupérer les valeurs uniques après dédoublonnage, je laisse la main
Je suppose qu'il faut jouer sur des tables temporaires comme ce que j'ai fait. ---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
|