Menu

Afficher le contenu de deux listes [Résolu]

Messages postés
48
Date d'inscription
samedi 4 janvier 2014
Dernière intervention
26 novembre 2018
-
Bonjour à toutes et tous,

j'ai deux listes principales que je veux afficher l'une aprés l'autre

Afficher liste1 (6 dictionnaires) de la listeA
Afficher liste1 (6 dictionnaires) de la listeB

Afficher liste2 de la listeA
Afficher liste2 de la listeB

-----------------

Afficher listeN de la listeA
Afficher listeN de la listeB

# listeA
for nb_1, elt in enumerate(sub_product):
    nb_val1 = 0
    while nb_val1 < 6:
        for val, data in elt[nb_val1].items():
            print(f"{val.upper()} : {data}")
        nb_val1 += 1
    print()

# listeB
    for nb_2, elt in enumerate(product_sub):
        nb_val = 0
        while nb_val < 6:
            for val, data in elt[nb_val].items():
                print(f"{val.upper()} : {data}")
            nb_val += 1
        print()
        if nb_1 == nb_2:
            break
        else:
            continue

mon dileme c'est qu'au deuxieme tour, arriver à la deuxieme boucle
(listeB) la boucle recommence de zéro et pas de la derniere position

est ce possible d'y remedier ?

merci


Configuration: Processeur I7, Ubuntu 18.04 64bits 32 Go de ram
3 écrans (19" vertical , 2 X 21" Horizontal)


Cordialement,
pascal
Afficher la suite 

Votre réponse

5 réponses

0
Merci
Bonsoir.

Tu utilises 2 fois la variable elt.
Commenter la réponse de tydus
Messages postés
48
Date d'inscription
samedi 4 janvier 2014
Dernière intervention
26 novembre 2018
0
Merci
Bonsoir tydus,

dans le doute,
for nb_1, elt_1 in enumerate(sub_product):
        nb_val_1 = 0
        while nb_val_1 < 6:
            for val_1, data_1 in elt_1[nb_val_1].items():
                print(f"{val_1.upper()} : {data_1}")
            nb_val_1 += 1
        print()

        for nb_2, elt_2 in enumerate(product_sub):
            nb_val_2 = 0
            while nb_val_2 < 6:
                for val_2, data_2 in elt_2[nb_val_2].items():
                    print(f"{val_2.upper()} : {data_2}")
                nb_val_2 += 1
            print()
            if nb_1 == nb_2:
                break
            else:
                continue

le résultat est identique : toute les listes de la listeB sont rajouté à chaque tour de boucle:

[liste1] ==> listeA
[liste1] ==> listeB
------
[liste2] ==> listeA
[liste1] ==> listeB
[liste2] ==> listeB

-----

[listeN] ==> listeA
[liste1] ==> listeB
[liste2] ==> listeB
-------
[listeN] ==> listeB
Bonjour speedy_souris.

Je ne comprend pas bien ce que tu désires obtenir.

Si j'ai bien saisi, sub_product et poduct_sub sont des listes de listes de dictionnaires.
Mais les structures des dictionnaires sont-elles identiques ?

Ne pourrais-tu pas utiliser zip pour parcourir les 2 listes simultanément ?

Sinon, il faudrait en montrer plus avec un exemple des structures et l'affichage que tu désires obtenir.
Commenter la réponse de speedy_souris
Messages postés
48
Date d'inscription
samedi 4 janvier 2014
Dernière intervention
26 novembre 2018
0
Merci
Bonjour tydus,

Oui mes structures de listes sont identiquent

voici quelques infos:

1)le script affiche une categorie de produit alimentaire

2)choix par un utilisateur d'une categorie de produit

3)une liste de choix de produit de la categorie choisi s'affiche

4)choix par l'utilisateur d'un produit ==> listeA [
{nom_produit : 'produit'},
{description_produit : 'description'},
{grade_nutritionnel : 'grade de A à E'},
{magasin_produit : 'magasin'},
{url_fiche_produit : 'url'}
]
5)le script affiche une liste de trois produit avec meilleur grade nutritionnel

6)choix ou pas par l'utilisateur d'un des trois produit ==> listeB [
{nom_produit : 'produit'},
{description_produit : 'description'},
{grade_nutritionnel : 'grade de A à E'},
{magasin_produit : 'magasin'},
{url_fiche_produit : 'url'}
]

7) le script affiche le produit choisi et ses caracteristique (listeA),
puis le produit substitué est ses caracteristique (listeB)

Je pense que le plus simple est d'afficher une boucle sur produit 1 listeA, un boucle produit 1 listeB
sur produit 2 liste A, un boucle produit 1 listeB
...etc

Cordialement,
pascal
Commenter la réponse de speedy_souris
Messages postés
48
Date d'inscription
samedi 4 janvier 2014
Dernière intervention
26 novembre 2018
0
Merci
Voici mon nouveau code,

    loop = 0
    first = 0
    last = 1
    while loop < len(sub_product):
        print(f"Produit Choisi N°{loop + 1}")
        print("======= ====== ====")
        print()
        for elt_1 in sub_product[first:last]:
            nb_val_1 = 0
            while nb_val_1 < 6:
                for val_1, data_1 in elt_1[nb_val_1].items():
                    print(f"{val_1.upper()} : {data_1}")
                nb_val_1 += 1
            print()

        print(f"Produit Substitué N°{loop + 1}")
        print("======= ========= ====")
        print()
        for elt_2 in product_sub[first:last]:
            nb_val_2 = 0
            while nb_val_2 < 6:
                for val_2, data_2 in elt_2[nb_val_2].items():
                    print(f"{val_2.upper()} : {data_2}")
                    nb_val_2 += 1
            print()
            first += 1
            last += 1
        loop += 1



je ne comprend pas pourquoi cet erreur list index out of range...
Commenter la réponse de speedy_souris
Messages postés
48
Date d'inscription
samedi 4 janvier 2014
Dernière intervention
26 novembre 2018
0
Merci
Grrr, encore cette erreur de comptage à partir de zéro, je finairai bien par y arrivé ....

remplacer la condition de la boucle while par < 5 (ligne 10 & 21)
et ca fonctionne à merveille !
Commenter la réponse de speedy_souris