IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Python Discussion :

des dictionnaires dans une liste


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut des dictionnaires dans une liste
    bonsoir à tous, c est tres timidement que je viens vers vous, en effet je decouvre python depuis deux semaines seulement et trouve ce langage interessant.

    apres avoir lu pas mal je voudrais aujourd'hui, créé avec mes tres pauvres connaissances dans ce langages (c'est rien de le dire...) : une liste contenant plusieurs dictionnaires. pour en faire un carnet d'adresses.

    je m'explique: [{nom:truc, prenom:bidule, adresse:20 rue etc, tel:0600000}, {nom:truc, prenom:dulebi, adresse:20 rue etc, tel:0600000}]

    pourriez vous me dire si c'est possible ou, sinon, existe t il une facon plus simple de commencer.

    je vous avez averti!!!! je suis un vrai debutant et il est sur que j ai encore beaucoup à apprendre..

    enfin, merci de m'aider si vous le souhaitez, bonne soiree à tous

    jeannoel

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    pourriez vous me dire si c'est possible ou, sinon, existe t il une facon plus simple de commencer.
    Oui c'est possible et je trouve que c'est une bonne idée.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Très bonne idée que tu as là.

    Toutefois, faut faire attention à ne pas exploser ta mémoire; Si c'est pour t'amuser avec les listes et les dicos à stocker 10 ou 20 noms ça ira mais si tu veux t'engager vers une vrai appli à aller stocker une quantité considérable de noms (et à les sauvegarder dans un fichier et à les récupérer depuis un fichier) ce serait dommage de le faire "à la main" alors qu'il existe un tas d'outils déjà tous faits

    Par exemple tu as sqlite. Il s'agit d'une mini bdd intégrée dans Python qui te permet de manipuler des datas à la façon sql (insert, select, update)

    Exemple (écrit en python v2 mais j'ai un peu vérfié et je pense qu'il fonctionnera aussi en Python v3)
    Code python : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #!/usr/bin/env python 
    # -*- coding: utf-8 -*-
     
    import sqlite3 
     
    bdd=sqlite3.connect("bdd.sqlite")	# ici il faut un nom de fichier qui contiendra la bdd mais tu peux aussi mettre ":memory:" et tout sera stocké en mémoire (et bien entendu perdu quand le programme se termine)...
    curs=bdd.cursor()
    try:
    	curs.execute(
    		"create table personne("\
    			"nom char(20) not null,"\
    			"prenom char(20) not null,"\
    			"adresse char(50)"\
    		")"
    	)
    except sqlite3.OperationalError:
    	# La table existe déjà
    	pass
    # try
     
    # Insertion
    curs.execute(
    	"insert into personne(nom, prenom, adresse) values ('truc', 'bidule', '20 rue etc')"
    )
    bdd.commit()
     
    # Récupération datas
    curs.execute("select * from personne")
    print(
    	"\n".join(
    		"%d: nom [%s], prenom [%s], adresse [%s]" % (
    			i+1,
    			c[0],
    			c[1],
    			c[2],
    		) for (i, c) in enumerate(curs.fetchall())
    	)
    )
     
    # Fermeture curseur et bdd
    curs.close()
    bdd.close()

    Bon, c'est déjà un poil plus compliqué mais ça t'ouvre d'autres perspectives...

    Tu as aussi des outils de nosql dédié au stockage de datas comme mongodb et son module python pymongo

    Bref tout un monde nouveau s'ouvre à toi...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Oui, on peut faire une liste de dictionnaires, mais ce n'est pas comme ça que je fais dans ce genre de problème.

    En effet, ici, chaque ligne comportant un dictionnaire va "consommer" de la mémoire en gardant toutes les clés. Ensuite, il faut voir après la facilité ou la difficulté avec laquelle des opérations élémentaires vont pouvoir être faites. Par exemple, est-ce que je peux faire facilement un tri selon le prénom (ou le téléphone, la ville)? Un filtrage? Une recherche? Etc...

    Il vaut mieux faire une "liste de listes" comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    annuaire = [["truc", "bidule", "20 rue etc", "0600000"], ["truc", "dulebi", "20 rue etc", "0600000"]]
    Ainsi, le prénom ("bidule", "dulebi", etc...) aura toujours l'index 1 (les index commencent à 0)

    On peut trier selon les prénoms comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    annuaire.sort(key=lambda v: v[1])
    On peut filtrer l'annuaire pour avoir toutes les fiches qui ont le prénom "bidule" comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    annuaire2 = [fiche for fiche in annuaire if fiche[1]=="bidule"]
    Pour une fiche particulière, rien n'empêche de retrouver un format dictionnaire, si on a définit les clés, ou de faire le contraire:

    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
    annuaire = [["truc", "bidule", "20 rue etc", "0600000"], ["truc", "dulebi", "20 rue etc", "0600000"]]
     
    # extraction de la 2ème fiche de l'annuaire
    fiche = annuaire[1]
     
    # fiche sous forme de dictionnaire
    fichedic = {"nom":fiche[0], "prenom":fiche[1], "adresse":fiche[2], "tel":fiche[3]}
    print fichedic
    # affiche: {'nom': 'truc', 'tel': '0600000', 'adresse': '20 rue etc', 'prenom': 'dulebi'}
     
    # retour à la même fiche sous forme de liste:
    fiche = [fichedic["nom"], fichedic["prenom"], fichedic["adresse"], fichedic["tel"], ]
     
    print fiche
    # affiche: ['truc', 'dulebi', '20 rue etc', '0600000']
    A noter que l'affichage de la fiche sous forme de dictionnaire a une caractéristique qui peut gêner : l'ordre des éléments de la fiche est modifié (il existe cependant un autre format de dictionnaire qui respecte l'ordre).

    Etc...

    Bref, le format "liste de listes" est plus facile à manipuler.

    Mais si l'annuaire devient gros, l'idée de Sve@r est meilleure: utiliser un système de gestion de base de données comme sqlite3: c'est très puissant et très rapide.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Bonjour à tous.

    Utiliser un dictionnaires pour stoquer l'ensemble des informations concernant une personne c'est bien.
    Créer et utiliser une classe Personne c'est beaucoup mieux, mais tu aura le temps de voir ça avec la POO.

    Contrairement à tyrtamos je déconseille fortement l'utilisation de liste de liste.

    Premièrement parce que consommation mémoire n'est pas critique, ton programme tourne sur un PC, pas une calculatrice.
    mais surtout que lorsque tu aura dans ton programme des trucs du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    annuaire[i][0][j][4][3]
    à la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    annuaire[i]["amis"][j]["téléphone"]["bureau"]
    Pour récupérer le numero de téléphone de bureau de l'ami i de la personne j, ça sera beaucoup plus dur à relire.

    l'utilisation d'une liste de dictionnaire ne change rien à la facilité ou la difficulté avec laquelle des opérations élémentaires vont pouvoir être faites

    On peut trier selon les prénoms comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    annuaire.sort(key=lambda v: v["prénom"])
    On peut filtrer l'annuaire pour avoir toutes les fiches qui ont le prénom "bidule" comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    annuaire2 = [fiche for fiche in annuaire if fiche["prénom"]=="bidule"]
    Toutefois, faut faire attention à ne pas exploser ta mémoire; Si c'est pour t'amuser avec les listes et les dicos à stocker 10 ou 20 noms
    Exploser ta mémoire ! 10 ou 20 noms !

    Faire un dico de 1000000 d'entrées ne pose pas de problème. Sauf si ton ordi n'a pas 50 Mo de mémoire disponible...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> import sys
    >>> sys.getsizeof(dict(zip(range( 1000000 ), range(1000000))))
    50331928
    Après oui il faudra trouver un moyen de stoquer sur disque tes données, une BDD est une bonne solution. Si tu débute en programmation,
    le module pickle permet de stoquer une liste dans un fichier, ce sera plus simple dans un premier temps.

    Bon courrage pour ton apprentisage.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par vincent.mbg Voir le message
    Contrairement à tyrtamos je déconseille fortement l'utilisation de liste de liste.
    Comme quoi il y a autant de solutions que d'informaticien, chacun pensant que sa solution est la meilleure (et c'est mon cas )...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vincent.mbg Voir le message
    Citation Envoyé par Sve@r Voir le message
    Toutefois, faut faire attention à ne pas exploser ta mémoire; Si c'est pour t'amuser avec les listes et les dicos à stocker 10 ou 20 noms
    Exploser ta mémoire ! 10 ou 20 noms !
    S'il te plait, ne fais pas semblant de ne pas avoir compris juste pour le plaisir d'être cassant. Tu sais très bien que ma phrase exacte est celle-ci
    Citation Envoyé par Sve@r Voir le message
    Si c'est pour t'amuser avec les listes et les dicos à stocker 10 ou 20 noms ça ira
    et que, par conséquent, cela ne signifie pas ce que tu sous entends !!!

    Citation Envoyé par vincent.mbg Voir le message
    mais surtout que lorsque tu aura dans ton programme des trucs du genre:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    annuaire[i][0][j][4][3]
    Pour récupérer le numero de téléphone de bureau de l'ami i de la personne j, ça sera beaucoup plus dur à relire.
    Juste pour le plaisir: dans l'exemple de Tyrtamos, tu n'auras jamais annuaire[i][0][j][4][3] car ça sous-entendrait que "annuaire" est un tableau à 5 dimensions alors que dans l'exemple de Tyrtamos, il n'en a que 2.
    Bon on peut imaginer que certains champs contiennent eux-mêmes d'autres sous-listes mais même comme ça, ça ne s'écrit pas ainsi.
    Si tu veux récupérer le n° de téléphone de l'ami "i" de la personne "j", il faudra alors écrire personne[personne[j][4][i]][3] (en sous-entendu que le champ n° 4 de la liste des personnes contient un tuple contenant chaque indice de chacun de ses amis et que le champ n° 3 contient son n° de téléphone). Hé oui, c'est pas tout de démonter quelqu'un d'autre mais encore faut-il le faire en manipulant correctement les outils qu'il propose...

    Citation Envoyé par vincent.mbg Voir le message
    Faire un dico de 1000000 d'entrées ne pose pas de problème
    Mouais aucun. Mais si tu veux ensuite commencer à les trier sur le nom dans un cas, puis sur le prénom dans un autre, puis sur l'âge dans un 3° ça ne posera là non plus aucun problème sauf que ça prendra 20 fois plus de temps que si tu utilises d'autres solutions plus adaptées à ce genre de volumétrie
    Voilà, moi aussi je sais casser mais tu vois, moi je le fais sans modifier ou tronquer tes écrits...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    D'autant plus qu'il suffit d'utiliser des noms de variable explicites pour se faciliter la vie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    annuaire = [["truc", "bidule", "20 rue etc", "0600000"], ["truc", "dulebi", "20 rue etc", "0600000"]]
    nom, prenom, adresse, tel = 0, 1, 2, 3
     
    print annuaire[0][prenom]
    bidule
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 16
    Points
    16
    Par défaut
    Salut,

    une façon de faire sémantiquement proche des dictionnaires mais plus efficace serait d'utiliser des namedtuples

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from collections import namedtuple
     
    Person = namedtuple('Person', ['prenom', 'nom', 'tel'])
     
    p1 = Person('James', 'Smith', '0102030405')
     
    print p1[0]
    print p1.prenom
    Ton annuaire serait une liste de tuples mais dont les éléments seraient aussi facile a retrouver que dans un dico

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    Salut,

    je vais pas donner de nouvelle solution, y en a déjà pas mal qui ont été proposées.
    je vais juste donner mon avis sur les différentes solutions proposées sans être trop cassant j'espère

    déjà comme fred1559, je trouve que c'est une bonne idée de faire ça avec une liste de dictionnaires comme proposé par jeannoel05. faut pas oublier qu'il a une expérience de 2 semaines en python et qu'il cherche donc plus probablement à s'exercer à manipuler les bases plutôt qu'à faire un truc optimisé et super fonctionnel.

    je dirai que la solution de Sve@r est très bien quand on est déjà bien à l'aise avec le langage qu'on utilise, mais en phase d'apprentissage, ça me parait utile de rajouter du SQL par dessus du python. mais c'est une excellente idée d'amélioration pour dans quelques semaines.

    la solution de tyrtamos à base de liste de listes, honnêtement je vois pas l'intérêt. à part le fait que les listes sont ordonnées et les dictionnaires non, j'y vois aucun avantage. d'autant qu'on peut s'arranger avec les clés des dictionnaires pour sortir les infos exactement dans l'ordre qu'on veut. alors il montre bien qu'on peut retrouver facilement un dictionnaire à partir d'une liste, mais encore une fois je vois pas l'intérêt de faire ça.

    je suis d'accord avec pas mal de points que relève vincent.mbg: la conso mémoire n'est pas critique, on peut parfaitement trier une liste de dictionnaire et c'est mieux de faire une classe pour modéliser une personne et ses infos. mais encore une fois, il s'agit d'un exercice pour débutant et la POO n'est peut être pas la priorité dans ce cas là.

    j'aime bien la solution de chicham qui permet d'allier les avantage des liste et des dictionnaires: les données sont nommés, les tuples sont ordonnés, on peut toujours trier la liste... ça me semble parfait pour commencer. et en plus ça me rappelle l'existence d'un truc que j'utilise jamais x:



    pour conclure, jeannoel05 je te conseille de commencer par la solution de chicham avec des tuples nommés pour stocker les infos d'une personne, et de stocker ta liste sous forme de pickle comme suggéré par vincent.mbg.
    une fois que tu seras à l'aise avec tout ça, je te conseillerais bien de commencer à t'intéresser à la POO et de remplacer les tuples nommés par une classe Person qui contiendra toutes les infos d'une personne.
    et enfin une fois que tout ça sera bien assimilé, tu pourrais stocker les données dans une base de données (SQLite c'est bien) comme suggéré pas Sve@r plutôt que dans un pickle.

    ça permettra une certaine progression en difficulté et ça te fera toucher à plusieurs aspects du langage.
    après ce n'est que mon avis, mais comme j'ai pas proposé de solution originale, je suis peut être plus objectif

  11. #11
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Tryph Voir le message
    la solution de tyrtamos à base de liste de listes, honnêtement je vois pas l'intérêt
    Comme quoi on se trompe souvent en jugeant la solution des autres...

    Il est vrai que j'utilise les listes de listes surtout avec les bases de données: les extractions SQL sont des "listes de tuples" qui ont le même format. Pour moi, ce genre de format est une représentation proche d'une table de base de données, et j'ai établi toutes les fonctions de manipulation utiles dans ce contexte.

    Ce qui fait que, connaissant bien toutes les solutions présentées ici, je n'hésite pas à choisir la liste de listes. Mais ça ne me dérange pas d'être le seul à penser ça... En tout cas, le PO a eu mon avis: à lui de choisir.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  12. #12
    Membre confirmé
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Points : 618
    Points
    618
    Par défaut
    Bonjour,

    Désolé si j'ai été un peu mordant.

    @ Sve@r
    Dans mon contre exemple, je voyais les choses comme ça, l'ami est une ref sur la liste pas un indice.
    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
     
    a = [ 
          [ "Jean",
            "Bonbeure", 
            ["063311", "873456"], 
            []
          ],
          [ "Tomas", 
            "Tillo", 
            ["063311", "873456"], 
            []
          ]
    ]
     
    a[0][3].append(a[1]) # Ajouter un ami.
    C'est pour moi un cas extrême, qu'il ne faudrait pas atteindre, car il y a trop de structure de données imbriquées même avec des dicos, mais ça marche et on peut très bien faire comme ça.

    Désolé d'avoir tronqué ta phrase. Je l'avais très bien comprise, mais de ce que j'en pense, 10 ou 20 ce n'est pas "ça ira", c'est "ça passe mega large". Et on peut très bien faire comme ça.

    Pour en revenir à la problématique de base Tryph à très bien conclu.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  13. #13
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut merci
    ok et bien merci pour l'interet que vous portez à mon annuaire, je vais essayer tout ca...
    bonne journée

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Pour le coup, pour une fois qu'un PO recherche une solution, et trouve une solution en adéquation avec le problème et son niveau, je trouve ça dommage de lui imposer une mise en forme liée à ses habitudes, voir ses goûts et couleurs.

    Il propose une solution, qui puis est bonne, pourquoi ne pas le laisser poursuivre son apprentissage qui va dans le bon sens ?

    Après la solution de Tyrtamos est bonne (pourquoi ne le serait-elle pas?), seulement le caractère technique n'est pas en correspondance avec le niveau du PO.

    Les namedTuples aussi, mais idem, on rentre dans des solutions qui sortent de la pure base python. Avec une solution simple, on peut résoudre le problème de manière aussi simple sans pour autant être avancé en python.

    Créer et utiliser une classe Personne c'est beaucoup mieux, mais tu aura le temps de voir ça avec la POO.
    Pas forcément, en fait je trouve cela un peu affirmatif, bref les goûts et les couleurs...

    Mais comme tu le dis, ici le problème ne se pose pas, on doit entrer dans des solutions plus simples pour le PO.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Pour le coup, pour une fois qu'un PO recherche une solution, et trouve une solution en adéquation avec le problème et son niveau, je trouve ça dommage de lui imposer une mise en forme liée à ses habitudes, voir ses goûts et couleurs.
    Je suis d'accord.
    Il est manifeste que le PO est assez peu sûr de lui, sinon il n'aurait pas posé cette question.
    Base de donnée, mémoire occupée,... sont de vrais sujets.
    Comme un débutant ne va pas créer un annuaire pour y stocker tous les habitants de sa région, çà dit juste "j'existe" mais çà n'apporte pas grand chose, sinon embrouiller un peu plus le PO


    Citation Envoyé par fred1599
    Après la solution de Tyrtamos est bonne (pourquoi ne le serait-elle pas?), seulement le caractère technique n'est pas en correspondance avec le niveau du PO.
    Tyrtamos raconte son approche du problème.
    Il fait partager son expérience, plante une graine dont on pourra s'inspirer un jour.
    Mais il est vrai que c'est un peu trop technique et semble être encore hors de portée pour certains.
    C'est la vie ;-)

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Comme un débutant ne va pas créer un annuaire pour y stocker tous les habitants de sa région, çà dit juste "j'existe" mais çà n'apporte pas grand chose, sinon embrouiller un peu plus le PO
    Ou alors à planter une graine dont il pourra s'inspirer un jour (où diable ai-je pu donc lire cela moi ???)

    Citation Envoyé par wiztricks Voir le message
    Mais il est vrai que c'est un peu trop technique et semble être encore hors de portée pour certains.
    L'ignorance est de courte durée, la connaissance reste à vie...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ou alors à planter une graine dont il pourra s'inspirer un jour (où diable ai-je pu donc lire cela moi ???)
    Est ce que la question du PO est de choisir comment réaliser la fonction de persistance?
    Dans ce cas on pourrait parler de mongodb, SGDB, pickle, JSON,...
    Et si tant est qu'un SGDB SQL ou pas soit "pertinent", je suis désolé mais les expertises sont plutôt dans le forum base de données.

    L'ignorance est de courte durée, la connaissance reste à vie...
    La connaissance, c'est surtout savoir mesurer son ignorance.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  18. #18
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2014
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par chicham Voir le message
    Salut,

    une façon de faire sémantiquement proche des dictionnaires mais plus efficace serait d'utiliser des namedtuples

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from collections import namedtuple
     
    Person = namedtuple('Person', ['prenom', 'nom', 'tel'])
     
    p1 = Person('James', 'Smith', '0102030405')
     
    print p1[0]
    print p1.prenom
    Ton annuaire serait une liste de tuples mais dont les éléments seraient aussi facile a retrouver que dans un dico
    des tuples oui bien sur mais d'apres ce que je sais ces derniers ne sont pas modifiables ca m''embete un peu, en tout cas merci beaucoup de tout l'interet que tu portes à mon idee.

  19. #19
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jeannoel05 Voir le message
    des tuples oui bien sur mais d'apres ce que je sais ces derniers ne sont pas modifiables ca m''embete un peu, en tout cas merci beaucoup de tout l'interet que tu portes à mon idee.
    Les namedtuples sont des tuples qui offrent une possibilité de modification

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from collections import namedtuple
     
    Person = namedtuple('Person', ['prenom', 'nom', 'tel'])
     
    p1 = Person('James', 'Smith', '0102030405')
     
    print p1
    print p1[0]
    print p1.prenom
    p1=p1._replace(nom="toto")
    print p1
    print p1.nom

    Bon, c'est en fait une tricherie. La fonction "_replace()" te renvoie une copie modifiée de l'objet (ne nous leurrons plus, les namedtuples sont en réalité des objets complexes). Donc en recopiant ce nouvel "objet" dans l'objet précédent, il prend sa place...
    Mon Tutoriel sur la programmation «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [VB.NET][ListView]des images dans une list view
    Par pcdj dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/12/2005, 12h08
  2. Intercaler des "titres" dans une liste ?
    Par tikawua dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/10/2005, 10h40
  3. [Lisp] Suppression des parenthèses dans une liste
    Par bourdaillet dans le forum Lisp
    Réponses: 3
    Dernier message: 19/12/2004, 21h02
  4. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo