boucle de dico et liste - Python - Programmation
Marsh Posté le 10-09-2016 à 18:29:43
Le format que tu as indiqué est erroné.
Et sans savoir comment sont stockées réellement tes valeurs, difficile de t'aider sur la façon de procéder.
Marsh Posté le 10-09-2016 à 21:12:05
Voici un exemple de mon dictionnaire
clef = nom de famille
valeur=liste de prénom age taille
Dujardin:[{Jean ;48 ;180};{Pierre ;64 ;164}]
Lelouche:[{Gilles ;48 ;180};{Claude ;64 ;164};{Pierre;64 ;164}]
Je veux récupérer 2 sorties à savoir
Dico_unique
Dujardin:[{Pierre ;64 ;164}]
Dico_doublon
Lelouche:[{Claude ;64 ;164};{Pierre;64 ;164}]
Marsh Posté le 11-09-2016 à 02:23:23
Euh, je comprend toujours pas
Un dictionnaire est un tableau associatif, clé, valeur, on peut mettre n'importe quel type en clé et valeur.
Le ; comme séparateur n'existe pas en python, de plus en python faire {'pierre', 64, 164} n'est pas un dictionnaire mais un set.
Tu aurais fait {'nom':'pierre, 'age':64, 'taille':164} là on a bien un dictionnaire.
Bon admettons ceci, ce qui ressemble au format supposé.
nom : liste de tuples contenant prénom, âge, taille
Code :
|
Pour trouver doublons, et liste à valeur unique, ça donne :
Code :
|
Comme tu peux le voir, c'est assez lourd, et je ne peux que te conseiller de stocker tes données dans une bdd, et là avec une, ou deux requêtes, ça devrait être torché pour obtenir ces deux résultats.
Marsh Posté le 11-09-2016 à 15:34:00
En effet, c’est surtout compliqué pour mon niveau…
Je pensais qu’il fallait une boucle while sur la longueur de la liste while i<len(..) .
Ensuite, je ne comprends pas cette partie
Code :
|
d’après ce que j’ai lu énumerate renvoie une liste de tuples avec indice (j), valeur (v)
mais ensuite je ne vois pas ce que tu en fais avec le add. Comment est ce que ça se compare les uns aux autres
Désolé pour mes questions (et ma synthaxe) de débutant.
Pour la bdd c'est impossible pour diverses raisons, mais je dois poursuivre un script python déjà commencé.
Marsh Posté le 11-09-2016 à 19:06:29
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 :
|
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.
Marsh Posté le 12-09-2016 à 08:00:35
Merci pour les infos
Je ne connaissais pas du tout sqlite3. Ca m'a l'air petit et très pratique pour ce que je dois faire.
Du coup je vais me plonger dedans.
Marsh Posté le 09-09-2016 à 15:21:24
Re bonjour,
J'ai effacé le topic afin de repartir sur de"bonnes "bases
j'ai un dictionnaire type:
projet2:[{projet1;pourcentage1;longueur1},{projet1b;pourcentage1b;longueur1b},{projet1c;pourcentage1c;longueur1c}..]
je souhaite comparer pourcentage1 pourcentage1b pourcentage1c et récupérer le pourcentage le plus élevé
si 2 pourcentages sont identiques alors je souhaite comparer les 2 longueurs pour récupérer la plus grande et la mettre dans un dico_max
si les 2 pourcentages sont identiques et que les 2 longueurs sont identiques alors je les récupère pour les mettre dans un autre dico (dico_doublon)
J'ose pas mettre de code, pour ne pas me faire engueuler
Message édité par iguanic le 09-09-2016 à 15:28:20