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 :

Mise a jour liste de dictionnaire


Sujet :

Python

  1. #1
    Invité(e)
    Invité(e)
    Par défaut Mise a jour liste de dictionnaire
    Bonjour à tous,

    j'ai une petite question pour le remplissage d'une liste de dictionnaire.

    Soit la liste de dics 'pkglist' suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [{'date' : '01/01/09', 'name': 'john', 'file' : 'text.dat', 'size' : '1024'},
    {'date' : '02/01/09', 'name': 'mike', 'file' : 'welcome.dat', 'size' : '2048'}]
    Je souhaite faire 2 choses :
    • Rajouter une clé link : '<a href="file.txt">file.txt</a>'
    • Modifier la valeur size : '1 M' (via fonction pretty_size)


    Au final, cela doit donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [{'date' : '01/01/09', 'name': 'john', 'file' : 'text.dat', 'size' : '1 M', 'link' : '<a href="text.dat">text.dat</a>'},
    {'date' : '02/01/09', 'name': 'mike', 'file' : 'welcome.dat', 'size' : '2 M', 'link' : '<a href="welcome.dat">welcome.dat</a>'}]
    Je fais déjà cela, mais de façon pas très propre via une recopie des données depuis la 1ere liste, puis des append dans tous les sens, mais c'est vraiment pas propre.

    Avez-vous des idéess pour faire cela simplement ?

    Merci !
    Dernière modification par Invité(e) ; 15/10/2009 à 17h37. Motif: MaJ code attendu

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    li = [{'date' : '01/01/09', 'name': 'john', 'file' : 'text.dat', 'size' : '1024'},
          {'date' : '02/01/09', 'name': 'mike', 'file' : 'welcome.dat', 'size' : '2048'}]
     
    seq1 = (('size','1M'),('link','<a href="text.da">text.dat</a>'))
    seq2 = [('size','2M'),('link','<a href="text.da">text.dat</a>')]
     
    for d in li:
        if d['size']=='1024':
            d.update(seq1)
        if d['size']=='2048':
            d.update(seq2)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    li = [{'date' : '01/01/09', 'name': 'john', 'file' : 'text.dat', 'size' : '1024'},
          {'date' : '02/01/09', 'name': 'mike', 'file' : 'welcome.dat', 'size' : '2048'}]
     
    for d in li:
     
        d.update([('size',str(int(d['size'])/1024)+'M'),('link','<a href="text.da">text.dat</a>')])
    Mais je trouve que ta structure de données ne va pas: elle comporte une répétition de mêmes valeurs comme clés des différents dictionnaires éléments de la liste.

    À moins qu’il y ait vraiment une raison qui détermine cette structure, ce serait mieux d’en avoir une autre.

    Car celle-ci prend de la mémoire inutilement et certainement des temps plus longs lors des traitements.

    Ce que je ferais à ta place , c’est avoir une liste de sous-listes:

    chaque sous-liste comporterait les valeurs associées aux clés dans un ordre connu et fixe , par exemple l’ordre ’date’, ’name’, ’file’, ’size’, ’link’.

    Le sachant et le maîtrisant, tu peux faire toutes les manipulations que tu veux quand même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    li = [['01/01/09', 'john', 'text.dat', '1024'],
          ['02/01/09', 'mike', 'welcome.dat', '2048']]
     
    for el in li:
        el[3] = str(int(el[3])/1024)+'M'
        el.append('<a href="text.da">text.dat</a>')

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Et comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    d = [{'date' : '01/01/09', 'name': 'john', 'file' : 'text.dat', 'size' : '1024'}, {'date' : '02/01/09', 'name': 'mike', 'file' : 'welcome.dat', 'size' : '2048'}]
     
    d[0]['size'] = '1 M'
    d[1]['size'] = '1 M'
     
    d[0]['link'] = '<a href="file.txt">file.txt</a>'
    d[1]['link'] = '<a href="file.txt">file.txt</a>'
     
    print d
    [{'date': '01/01/09', 'link': '<a href="file.txt">file.txt</a>', 'name': 'john', 'file': 'text.dat', 'size': '1 M'}, {'date': '02/01/09', 'link': '<a href="file.txt">file.txt</a>', 'name': 'mike', 'file': 'welcome.dat', 'size': '1 M'}]
    Tyrtamos
    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

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Je suis pas très sur d'avoir compris la question, mais voici un essai de réponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/python
    # -*- coding:Utf-8 -*-
     
    mylist=[{'date' : '01/01/09', 'name': 'john', 'file' : 'text.dat', 'size' : '1024'},
            {'date' : '02/01/09', 'name': 'mike', 'file' : 'welcome.dat', 'size' : '2048'}]
    print 'Avant: %s' % mylist
    for item in mylist:
        item['link']='<a href="file.txt">file.txt</a>'
        item['size']='1 M'
    print 'Après: %s' % mylist
    Et voici le résultat, c'est ce que tu voulais ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Avant: [{'date': '01/01/09', 'name': 'john', 'file': 'text.dat', 'size': '1024'}, {'date': '02/01/09', 'name': 'mike', 'file': 'welcome.dat', 'size': '2048'}]
    Après: [{'date': '01/01/09', 'link': '<a href="file.txt">file.txt</a>', 'name': 'john', 'file': 'text.dat', 'size': '1 M'}, {'date': '02/01/09', 'link': '<a href="file.txt">file.txt</a>', 'name': 'mike', 'file': 'welcome.dat', 'size': '1 M'}]
    Bon je n'utilise pas la fonction pretty_size pour modifier 'size', mais l'idée est là.

    Salutations.

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Merci pour vos retours

    malheureusement, pour l'instant ça ne me convient pas (je sais je suis chiant)

    J'ai d'ailleurs corrigé mon 1er post, y a des copier/coller qui sont mal passé.

    Alors, dans l'ordre :
    - eyquem: je préfère utiliser des listes de dictionnaire, car j'en ai besoin par ailleurs.
    - tyrtamos: ma liste est BCP plus longue que mon exemple, donc ça ira pas
    - aepli : faut que je lise ton post, je viens juste de le découvrir

    EDIT : merci aepli, c'est bien ce qu'il me fallait !
    Dernière modification par Invité(e) ; 15/10/2009 à 17h58.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Ce que tu as décrit dans ta question s’appelle une mise à jour = updating de dictionnaire:

    une clé qui n’existe pas -> elle est crée avec la valeur indiquée
    une clé qui existe -> sa valeur est modifée avec la valeur indiquée

    Il y a une fonction pour cela: update()

    a.update([ b ]) updates a with key/value pairs from b, overwriting existing keys, returns None

    http://www.python.org/doc/2.5.4/lib/typesmapping.html

    Je ne vois pas ce que ça apporte de ne pas y recourir. Python est bien pensé pour répondre à des besoins.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 105
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    @DoObS: De rien ce fut un plaisir.

    @eyquem: Bien vu, du coup moi j'ai appris un nouveau truc ^^.
    Comme quoi l'info, c'est pas compliqué, il suffit de savoir lire.

    Salutations.

Discussions similaires

  1. Mise a jour liste
    Par clemclem2121 dans le forum IHM
    Réponses: 1
    Dernier message: 21/09/2013, 07h43
  2. [AC-2003] mise a jour liste déroulante
    Par revemane dans le forum IHM
    Réponses: 1
    Dernier message: 03/02/2010, 18h42
  3. [AC-2003] mise a jour liste deroulante
    Par chuspyto dans le forum IHM
    Réponses: 5
    Dernier message: 10/11/2009, 05h24
  4. [AC-2003] Mise a jour liste déroulante
    Par nitou dans le forum IHM
    Réponses: 1
    Dernier message: 21/04/2009, 00h20
  5. mise a jour list box datatable
    Par AlligO dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/11/2008, 21h43

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