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 :

trier un dictionnaire


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut trier un dictionnaire
    Bonjour,
    je ne suis pas un pro en python, mais savez vous s'il est possible de trier un dictionnaire par valeur et de récupérer les n premiers couples d'un dictionnaires.

    par ex : dico = {"a":2,"b:4","z":3}

    je veux trier par valeur ==> dico = {"b:4","z":3,"a":2}
    et je souhaite récupérer par exemple les deux premier ==> b:4 et z:3

    est-ce possible sinon je serai obligé d'implémenter un algo.

    merci

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Bonjour,

    et ta réponse, tu trouveras!
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    merci beaucoup, exactement, j'ai trouvé ce que je souhaitais mais pas totalement, car je souhaite récupérer par exemple les 3 premières valeurs d'un dictionnaire après avoir trié.

    je vais continuer à chercher

    merci beaucoup

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    c bon, en fait, j'ai répondu trop rapidement !!!
    comme le tri se fait dans une liste par ex : [('courir', 4), ('école', 3), ('tennis', 2), ('fruit', 2), ('triche', 1)]
    si je souhaite récupérer les 2 premiers éléments par ex, un petit liste[:2]

    je te remercie!!

  5. #5
    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,

    On ne peut pas directement trier un dictionnaire mais on peut récupérer ces données dans l'ordre qu'on veut en les convertissant en liste.

    Soit par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico = {'a':2, 'b':4, 'z':3, 'p':5, 'u':9}
    On convertit en liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    L = dico.items()
    print L
    [('a', 2), ('p', 5), ('b', 4), ('u', 9), ('z', 3)]
    Pour trier cette liste selon la valeur (et pas la clé), il faut créer une petite fonction qui compare les éléments de la liste et renvoie -1, 0 ou +1 selon le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def cmpval(x,y):
        if x[1]>y[1]:
            return -1
        elif x[1]==y[1]:
            return 0
        else:
            return 1
     
    L.sort(cmpval)
    print L
    [('u', 9), ('p', 5), ('b', 4), ('z', 3), ('a', 2)]
    On récupère bien la liste (clé:valeur) dans l'ordre des valeurs.

    On peut ensuite prendre les 3 premières valeurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    L = L[0:3]
    print L
    [('u', 9), ('p', 5), ('b', 4)]
    On pourrait aussi retransformer cette liste en dictionnaire, mais attention: l'ordre de ces éléments ne sera pas forcément conservé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    D={}
    for i in range(0,3):
        D[L[i][0]] = L[i][1]
    print D
    {'p': 5, 'b': 4, 'u': 9}
    En travaillant le code on doit pouvoir faire plus simple, mais ça, ça marche déjà.

    Ok?

    Tyrtamos

    [edit]: j'ai répondu trop lentement...
    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

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    j'avais déjà trouvé sur le forum un code pour trier un dictionnaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> dic ={'xxxx': 24, 'yyyyy': 7, 'zzzzzz': 1}
    >>> from operator import itemgetter
    >>> l = dic.items()
    >>> l.sort(key=itemgetter(1),reverse=True)
    >>> l
    [('xxxx', 24), ('yyyyy', 7), ('zzzzzz', 1)]
    >>> l[:2]
    [('xxxx', 24), ('yyyyy', 7)]
    ça marche nikel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trier un dictionnaire de tuples
    Par a1331 dans le forum Général Python
    Réponses: 3
    Dernier message: 02/07/2013, 13h53
  2. [Débutant] Trier un dictionnaire
    Par renovatio34 dans le forum C#
    Réponses: 6
    Dernier message: 08/05/2012, 20h13
  3. Trier données sous forme de dictionnaire dans un fichier
    Par pinard dans le forum Général Python
    Réponses: 3
    Dernier message: 17/11/2011, 17h37
  4. [XNA]Trier les valeurs d'un dictionnaire
    Par avogadro dans le forum C#
    Réponses: 8
    Dernier message: 17/03/2010, 16h24
  5. trier un dictionnaire
    Par nina08 dans le forum Général Python
    Réponses: 6
    Dernier message: 04/08/2008, 00h11

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