Problème de liste de dictionnaires

Fermé
Evan17 - Modifié le 1 avril 2021 à 16:07
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 1 avril 2021 à 17:02
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

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 1 avril 2021 à 16:43
bonjour, ne penses-tu pas utile de partager un programme complet que nous pouvons tester?
la ligne 23 me semble superflue.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
1 avril 2021 à 16:55
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
1 avril 2021 à 17:02
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
0