Problème de liste de dictionnaires

Signaler
-
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
-
Bonjour, j'essaie de coder un petit programme qui prend en entrée des tableaux excel sur des capacités et des ressources à allouer pour ressortir toutes les allocations possibles (arrangements). Après plusieurs, boucle plutôt prise de tête je pensais toucher au but. Je range chaque nouvelle allocation dans un dictionnaire ( un dico = 1 allocation), puis je souhaite ranger tous ces dictionnaires dans une grande liste pour faciliter la sortie. Dans la boucle, les dictionnaires (=allocations) semblent cohérentes mais une fois rangés dans la liste ils ressortent tous identiques... je m'arrache les cheveux... Quelqu'un a une idée ?

Indications: - alloc est un dictionnaire contenant une première allocation simple que je compte changer pour les avoir toutes
-
 
switch = []
for aff in alloc.items(): #on change le dico en list parce que c'est plus pratique
    u = []
    for i in range(len(aff[1])):
        u.append(aff[1][i])
    switch.append(u)

def list_to_dict(list): #une fonction qui change une liste en dico
    dic = {}
    for i in range(1,feuille_lignes.nrows):
        dic[feuille_lignes.cell_value(rowx=i,colx=0)] = list[i-1]
    return(dic)

n = len(switch)

list_alloc = []
list_alloc.append(alloc)
for i in range(n):
    for j in range(i+1,n):
        for h in range(len(switch[j])):
            for p in range(len(switch[i])):
               v=[]
               x = switch[i][p]
               switch[i][p] = switch[j][h]
               switch[j][h] = x
               v = list_to_dict(switch)  #apres un changement on a une nouvelle allocation donc on la store dans un dico
               print(v)
               list_alloc.append(v) # que l'on ajoute à la liste des allocs

print(list_alloc)




Configuration: Windows / Chrome 89.0.4389.90

1 réponse

Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
bonjour, ne penses-tu pas utile de partager un programme complet que nous pouvons tester?
la ligne 23 me semble superflue.
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
je suspecte que ton soucis, c'est que tu penses probablement, en ligne 27, mémoriser le contenu de switch, alors que tu mémorises des pointeurs vers des éléments de switch.
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 >
Messages postés
15040
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

en ligne 12, je pense que list est une liste de listes de listes.
list[i-1] est donc une liste de listes.
en ligne 12, tu mémorises donc une référence vers cette liste de listes.
et ensuite, en lignes 25 et 26, tu modifies le contenu de cette liste de listes.
https://docs.python.org/fr/3/library/copy.html