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 :

récupérer la valeur maximum dans un dictionnaire python [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 90
    Points : 65
    Points
    65
    Par défaut récupérer la valeur maximum dans un dictionnaire python
    Salut @ tous

    je veut récupérer la valeur maximale d’après un dictionnaire

    Dict = {('A', 1): 2, ('B', 2): 3, ('A', 0): 2, ('C', 1): 3,('F', 1): 2, ('M', 2): 3, ('L', 0): 2, ('H', 1): 4}

    comment je peut récupérer les valeur maximum selon la deuxième portion de la clé par exemple

    max ---- > dict[(:, 1)] == 4


    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 54
    Points
    54
    Par défaut
    Yop !
    en one shot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    max({i:j for i, j in Dict.items() if i[1] == 1}.values())

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    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 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Salut,

    impossible dans balayer les clés, filtrer celles qui vont bien et récupérer la valeur max de ce sous ensemble de clés là.
    Un truc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max([ d[k] for k in d if k[1] == 1 ])
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 90
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    impossible dans balayer les clés, filtrer celles qui vont bien et récupérer la valeur max de ce sous ensemble de clés là.
    Un truc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max([ d[k] for k in d if k[1] == 1 ])
    - W

    Merci wiztricks votre code marche bien

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 808
    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 808
    Points : 7 086
    Points
    7 086
    Par défaut
    Sinon plus dans le sens algorithmique (et peut-être plus rapide...), une solution simple serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    maxi = None
    for k in Dict:
        if k[1] == 1:
            if maxi is None or Dict[k] > maxi:
                maxi = Dict[k]
     
    print(maxi)
    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)

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    fred1599 a écrit :
    Sinon plus dans le sens algorithmique (et peut-être plus rapide...), une solution simple serait
    Effectivement c'est plus rapide avec le code de Fred.

    code de test :
    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
    16
    17
    18
    19
    20
    Dict = {('A', 1): 2, ('B', 2): 3, ('A', 0): 2, ('C', 1): 3,('F', 1): 2, ('M', 2): 3, ('L', 0): 2, ('H', 1): 4}
     
    def max1(d):
        return max([ d[k] for k in d if k[1] == 1 ])
     
     
    def max2(d):
        maxi = None
        for k in d:
            if k[1] == 1:
                if maxi is None or d[k] > maxi:
                    maxi = d[k]
        return maxi
     
    for x  in range(1,1000000) :
        max1(Dict)
    for x  in range(1,1000000) :
        max2(Dict)
    print (max1(Dict))    
    print (max2(Dict))
    et voici le résultat avec le profiler de Spyder :
    Nom : Profiler_test_dict.png
Affichages : 13979
Taille : 12,0 Ko

    A voir le test si au lieu de faire des boucles on utilisait un dictionnaire plus consistant.


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 808
    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 808
    Points : 7 086
    Points
    7 086
    Par défaut
    En fait la mesure du temps devrait être faîte sur la longueur du dictionnaire et non pas sur le nombre de fois qu'on exécute cette fonction. Je ne sais pas si ça serait aussi évident...
    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)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/01/2012, 16h24
  2. [MySQL] Récupérer les valeurs définies dans un champ ENUM
    Par Huntress dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/07/2010, 18h55
  3. Réponses: 16
    Dernier message: 19/07/2006, 00h16
  4. comment récupérer le valeur mise dans le label puis afficher
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/12/2005, 20h00
  5. Réponses: 2
    Dernier message: 11/12/2004, 21h20

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