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 :

Création d'une matrice ou d'un dictionnaire à partir d'une liste 2D [Python 3.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2020
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Création d'une matrice ou d'un dictionnaire à partir d'une liste 2D
    Bonjour ,

    j'ai une matrice qui présente des données comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ['2200-032-300', [45.452222, -71.52545]]
    ['2200-032-300', [45.425163, -71.45625]]
    ['2200-032-300', [45.536546, -71.69526]]
    ['2010-033-010', [45.965365, -71.45665]]
    ...
    J'aimerais obtenir un dictionnaire ou une liste 2D qui me permettrait d'obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [2200-032-300, [45.452222, -71.52545], [45.425163, -71.45625], [45.536546, -71.69526]...]
    ['2010-033-010', [[45.965365, -71.45665]...]
    Ça peut se traduire comme un dictionnaire où mes clés sont les valeurs à l'index 0 de mes lignes de ma matrice (le shape_id) de mon code plus bas.

    Pour le moment j'ai produit ce code qui ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for shape in data_shapes :  # pour les élément de ma matrice
        compteur_1 = 0  # je détermine mon compteur de boucle qui parcours chaque ligne
        point_ligne.append(shape[compteur_1][0])  #  j'ajoute la première valeur
        # avant de passer à la prochaine ligne, je veux ajouter un tableau qui contient l'ensemble des coordonnées des points
        for c in data_shapes:  # pour chaque élément de mon fichier data_shapes qui contient l'information suivante sous la forme suivante [shape_id, [coordonnées,coordonnée]]
            compteur_2 = 0  # je déclare mon compteur
            #  je crée une condition qui vérifie si le shape_id est déjà dans le tableau point_ligne
            if c[compteur_2][0] in point_ligne:  # si le shape_id est là
                point_ligne.append(c[compteur_2][1])
                compteur_2 +=1  # passe à la prochaine ligne de la matrice
            else :
                compteur_1 +=1  # passe à le prochaine shape_id du tableau "liste_id"
    J'ai besoin d'aide.

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour,

    tu essayes apparemment de tirer partie du fait que les identifiants (les "shape_id") de tes points sont regroupés dans ta matrice de départ (ils se suivent).

    Mais il y a encore plus simple en utilisant, comme type/classe pour le résultat collections.defaultdict (et sans se soucier de l'ordre des identifiants).

    A chaque ligne lue (identifiant du point suivi le la latitude et de la longitude), tu ajoutes les coordonnées (append) dans le dictionnaire à la clé correspondant à l'identifiant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    >>> import collections
    >>> point_ligne = collections.defaultdict(list)
    >>>
    >>> for shape_id, lat_lon in data_shapes:
    ...     point_ligne[shape_id].append(lat_lon)
    ...
    >>> for k, v in point_ligne.items():
    ...     print(k)
    ...     for coords in v:
    ...         print('\t', coords)
    ...
    2200-032-300
    	 [45.452222, -71.52545]
    	 [45.425163, -71.45625]
    	 [45.536546, -71.69526]
    2010-033-010
    	 [45.965365, -71.45665]
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par plxpy Voir le message
    Mais il y a encore plus simple en utilisant, comme type/classe pour le résultat collections.defaultdict (et sans se soucier de l'ordre des identifiants).

    A chaque ligne lue (identifiant du point suivi le la latitude et de la longitude), tu ajoutes les coordonnées (append) dans le dictionnaire à la clé correspondant à l'identifiant
    Joli truc, je ne connaissais pas.

    Perso je serais parti sur ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> point_ligne=dict()
    >>> for shape_id, lat_lon in data_shapes:
    ...     if shape_id not in point_ligne: point_ligne[shape_id]=list()
    ...     point_ligne[shape_id].append(lat_lon)
    ...
    Au final ça revient au-même évidemment mais je trouve defaultdict super sympa
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    Au final ça revient au-même évidemment mais je trouve defaultdict super sympa
    On peut aussi faire sans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> point_ligne=dict()
    >>> for shape_id, lat_lon in data_shapes:
    ...    point_ligne.setdefault(shape_id, []).append(lat_lon)
    ...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide à la création d'une requête
    Par Sayrus dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/08/2009, 12h07
  2. Réponses: 2
    Dernier message: 22/07/2009, 22h36
  3. Aide pour création d'une page en ASP
    Par jj6401 dans le forum ASP
    Réponses: 8
    Dernier message: 06/03/2009, 11h04
  4. Outil d'aide à la création d'une DTD
    Par Elmilouse dans le forum Valider
    Réponses: 1
    Dernier message: 28/02/2006, 01h56
  5. [MySQL] Aide à la création d'une requête
    Par tom06440 dans le forum Requêtes
    Réponses: 6
    Dernier message: 19/10/2005, 22h05

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