IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

danielhagnoul

Julia. Exercice : créer un dictionnaire à partir d'une liste de listes.

Noter ce billet
par , 15/05/2021 à 11h43 (3760 Affichages)
Question posée sur le forum Python : https://www.developpez.net/forums/d2.../#post11723255

@THOMAS nous donne :
ListNotes = [['Mathématiques', '12'], ['Mathématiques', '9'], ['Mathématiques', '15'], ['Informatique', '17'], ['Physique', '11'], ['Physique', '8'], ['Chimie', '16'], ['Chimie', '10']]

On doit transformer ListNotes en dictionnaire et calculer la moyenne.

Solution Julia

Le travail ne présente pas de difficulté majeure si l'on connaît les fonctions push!, haskey, pairs et mean.

Il faut commencer par mettre cette liste de listes au format Julia (" au lieu de ' et entier au lieu de texte pour les notes).

Code Julia : 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
using Statistics
 
function main()
    ListNotes = [["Mathématiques", 12], ["Mathématiques", 9], ["Mathématiques", 15], 
    ["Informatique", 17], ["Physique", 11], ["Physique", 8], 
    ["Chimie", 16], ["Chimie", 10]]
 
    notes = Dict{String, Vector{Int64}}()
    moyennes = Dict{String, Float64}()
 
    for item in ListNotes
        key = item[1]
        value = item[2]
 
        if haskey(notes, key)
            push!(notes[key], value) # push dans un array
        else
            push!(notes, key => [ value ]) # push dans un dict
        end
    end
 
    for (key, value) in pairs(notes)
        push!(moyennes, key => mean(value))
    end
 
    @show notes
    @show moyennes
end
 
@time main()
 
#=
notes = Dict("Informatique" => [17], "Mathématiques" => [12, 9, 15], "Physique" => [11, 8], "Chimie" => [16, 10])
moyennes = Dict("Informatique" => 17.0, "Mathématiques" => 12.0, "Physique" => 9.5, "Chimie" => 
13.0)
  0.000845 seconds (296 allocations: 17.109 KiB)
=#

Licence Creative Commons Attribution 2.0 Belgique

Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog Viadeo Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog Twitter Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog Google Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog Facebook Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog Digg Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog Delicious Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog MySpace Envoyer le billet « Julia. Exercice : créer un dictionnaire à partir d'une liste de listes. » dans le blog Yahoo

Tags: haskey, julia, mean, push
Catégories
Programmation , Julia

Commentaires

  1. Avatar de dourouc05
    • |
    • permalink
    Pour améliorer ton code, tu peux regarder du côté des DefaultDict, dans DataStructures.jl : https://juliacollections.github.io/D.../default_dict/

    Je trouve plus joli d'écrire key in keys(dict) que d'utiliser haskey, mais c'est une histoire de goût.

    Pour mettre une valeur dans un dictionnaire, tu peux l'indexer directement sans passer par push! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    julia>  d = Dict()
    Dict{Any, Any}()
    
    julia> d[1] = [1]
    1-element Vector{Int64}:
     1
    
    julia> d
    Dict{Any, Any} with 1 entry:
      1 => [1]
    Pour diminuer l'utilisation de mémoire, tu ne dois stocker que deux nombres par matière : le nombre de notes et le total (plutôt que de stocker toutes les notes indépendamment). La moyenne se fait avec la division du total par le nombre de notes.