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

  1. #1
    Candidat au Club
    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
    Modérateur

    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
    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 «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  4. #4
    Expert éminent sénior
    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

###raw>template_hook.ano_emploi###