IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Rassembler les éléments d'une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut Rassembler les éléments d'une liste
    Bonjour,

    Etant nouveau sur Python, je me tourne vers vous pour vous expliquer mon problème. Je désire rassembler certains éléments d'une liste a partir d'un fichier TXT. La structure de mon fichier est la suivante:

    L;article;qte;longueur

    donc par exemple

    L;EG25D;23;500;L;EG25D;17;500;L;EG25D;23;510;L;DPC50;17;500

    Je souhaite ré-écrire le fichier en fusionnant les lignes "L" dont la référence article et la longueur son identique, par rapport à mon exemple retrouver le résultat suivant :

    L;EG25D;40;500;L;EG25D;23;510;L;DPC50;17;500

    Dans mon exemple les deux premières lignes ont été fusionnées du faite que l'article et la longueur sont identiques et les quantités ont été additionnées. Je but sur le fait de chercher les éléments identiques et de les fusionner.

    Comptant sur votre aide

    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 676
    Par défaut
    Salut,

    Citation Envoyé par prev639367 Voir le message
    Comptant sur votre aide
    Il faut découper la chaine suivant les ";" puis regrouper les éléments par paquets de 4:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> s = "L;EG25D;23;500;L;EG25D;17;500;L;EG25D;23;510;L;DPC50;17;500"
    >>> s.split()
    ['L;EG25D;23;500;L;EG25D;17;500;L;EG25D;23;510;L;DPC50;17;500']
    >>> s.split(';')
    ['L', 'EG25D', '23', '500', 'L', 'EG25D', '17', '500', 'L', 'EG25D', '23', '510'
    , 'L', 'DPC50', '17', '500']
    >>> L = s.split(';')
    >>> for x in range(0, len(L), 4):
    ...     print(L[x:x+4])
    ...
    ['L', 'EG25D', '23', '500']
    ['L', 'EG25D', '17', '500']
    ['L', 'EG25D', '23', '510']
    ['L', 'DPC50', '17', '500']
    Puis on va sommer la 2ème colonne de ceux qui ont la même clé composite (article;longueur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> from collections import defaultdict
    >>> dd = defaultdict(int)
    >>> for x in range(0, len(L), 4):
    ...     key = L[x+1], L[x+3]
    ...     dd[key] += int(L[x+2])
    ...
    >>> from pprint import pprint
    >>> pprint(dd)
    {('DPC50', '500'): 17,
     ('EG25D', '500'): 40,
     ('EG25D', '510'): 23}
    >>>
    Reste à remettre cela sous forme de chaine de caractères.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut
    Merci, j'essaye ça ce week-end et vous poste le retour

    Bonne soirée

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut
    Bonjour et merci à toi wiztricks, cela fonctionne parfaitement bien, mais j'ai encore une question, comment récupérer les élément créés ?

    J'ai essayé

    Mais je ne récupère que les valeurs de quantité.

    Une idée ?

    D'avance merci

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    comme son nom l'indique plutôt bien, la méthode values() que tu appelles sur le dictionnaire ne renvoie que les valeurs. si tu veux récupérer les clefs avec, il faut utiliser la méthode items() et boucler dessus.

    un truc de ce genre devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for key, value, in dd.items():
        print("L;{k[0]};{v};{k[1]}".format(k=key, v=value))
    ou alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (ref, len_), value, in dd.items():
        print("L;{};{};{}".format(ref, value, len_))
    (avec une légère préférence personnelle pour la deuxième possibilité.)

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut
    Merci beaucoup de ta réponse Tryph.

    Je teste

    Merci encore

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/11/2007, 16h46
  2. Réponses: 1
    Dernier message: 21/04/2007, 16h36
  3. Réponses: 12
    Dernier message: 04/03/2007, 11h43
  4. Tri aléatoire parmis les éléments d'une liste
    Par ahouba dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 18h03
  5. Réponses: 3
    Dernier message: 15/05/2006, 16h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo