[Python] Matrice à partir d'un dictionnaire

Angharad -  
UbuntuPR Messages postés 100 Statut Membre -
Bonjour,
Je suis complètement débutante en python.
Je voudrais créer une matrice de façon simple en sortant les valeurs numériques associées aux clés d'un dictionnaire. Je ne sais pas comment m'y prendre et ne trouve pas d'aide dans les tutoriaux ou sur les autres posts.
Merci d'avance !

3 réponses

  1. UbuntuPR Messages postés 100 Statut Membre 10
     
    def creerMatrice(lignes,colonnes) :
    	assert type(lignes) is int
    	assert type(colonnes) is int
    	matrice = {}
    	for i in range(lignes) :
    		indiceLigne = i + 1
    		for j in range(colonnes) :
    			indiceColonne = j + 1
    			indiceColonne = str(indiceColonne)
    			indiceLigne = str(indiceLigne)
    			matrice[indiceLigne+indiceColonne] = ''
    	return matrice
    
    
    def remplirMatrice(lignes,colonnes,composantes) :
    	assert type(lignes) is int
    	assert type(colonnes) is int
    	assert type(composantes) is list
    	matrice = {}
    	for i in range(lignes) :
    		indiceLigne = i + 1
    		for j in range(colonnes) :
    			indiceColonne = j + 1
    			indiceColonne = str(indiceColonne)
    			indiceLigne = str(indiceLigne)
    			matrice[indiceLigne+indiceColonne] = composantes[j][i]
    	return matrice
    


    Bonsoir,

    Il y a ci-dessus deux fonctions similaires, la première, créer un dictionnaire avec des clés qui représentent où nous sommes dans la matrice (ex : 21 = 2eme ligne 1ere colonne), mais les items sont vides.

    La seconde, elle, remplit les items. En gros tu n'as besoins que de la deuxième fonction pour remplir ta matrice.

    Il faut juste comprendre que les composantes de matrices sont à rentrer dans la fonction remplirMatrice de la manière suivante :
    >>> remplirMatrice(3,2,[[1,2,3],[2,3,4]])
    {'11': 1, '12': 2, '21': 2, '22': 3, '32': 4, '31': 3}
    


    Tes composantes sont à entrer dans une liste de liste, ou chaque liste représente une colonne. Avec l'exemple ci-dessus ta matrice serait :
    1 2
    2 3
    3 4

    La fonction peut te paraître complexe, mais une fois créée il devient simple de créer un dico représentant une matrice.

    Si tu as des questions sur le code n'hésites pas à demander.

    En espérant t'avoir aidé.
    0
  2. Angharad
     
    Tu as fait ce que je voulais faire en sens inverse, mais du coup tu m'as débloquée ! merci beaucoup
    0
  3. heyquem Messages postés 808 Statut Membre 131
     
    salut,

    la première fonction peut s'écrire plus simplement:

    def creerMatrice(lignes,colonnes) :
    	assert type(lignes) is int
    	assert type(colonnes) is int
    	matrice = {}
    	for i in range(1,lignes+1) :
    		for j in range(1,colonnes+1) :
    			matrice[str(i)+str(j)] = ''
    	return matrice


    notez que str(i)+str(j) peut aussi s'obtenir par '%d%d' % (i,j)
    Voir
    https://docs.python.org/3/library/stdtypes.html#index-635

    On peut aussi utiliser la fonction dict() pour créer le dictionnaire représentant la matrice:

    def creerMatrice(lignes,colonnes) :
    	assert type(lignes) is int
    	assert type(colonnes) is int
    	return dict( ('%d%d' % (i,j) , '')
                         for i in range(1,lignes+1)
                         for j in range(1,colonnes+1))

    Il y a quand même un hic avec cette fonction et cette représentation par un dictionnaire avec ces clés:
    pour une matrice 20 x 20 , la case ligne=11,colonne=3 aura la même clé '113' que le case ligne=1,colonne=13

    Il faut garder distincts les indices de la ligne et de la colonne. Pour cela utiliser un doublet (c'est à dire un tuple à deux éléments):

    def creerMatrice(lignes,colonnes) :
    	assert type(lignes) is int
    	assert type(colonnes) is int
    	return dict( ((i,j) , '')
                         for i in range(1,lignes+1)
                         for j in range(1,colonnes+1))
    0
    1. UbuntuPR Messages postés 100 Statut Membre 10
       
      Bien vu pour la matrice 20*20, j'oublie svt l'utilisation de la fonction dict().
      0