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 éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    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 Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    et ta réponse, tu trouveras!

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    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 éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    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 confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    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...

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    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