Retourner aux forums || Retourner au forum Programmation.python
Programmation.python : Tri dans un dictionnaire de liste
Posté par Gilles G. () le 16 novembre 2006j'utilise un dictionnaire pour stocker des informations sous forme de liste pour chaque champ. Il s'agit des propriétés des modes d'une pièce:
modes = {'fréquence':[12, 3, 24], 'coef':[1, 2, 3]}
et je voudrais trier ce dictionnaire en fonction de la fréquence pour obtenir:
modes = {'fréquence':[3, 12, 24], 'coef':[2, 1, 3]}
Je souhaite éviter de recourir à la définition d'un classe mode, car je voudrais ensuite pouvoir convertir les listes de mon dictionnaire en array.
Voilà. C'est peut-être une question triviale, mais je ne trouve pas de solution élégante. Pour l'instant, je fais la copie du champ 'fréquence' et je suis obligé de faire un nouveau dictionnaire qui contient les modes triés.
Merci d'avance!
> Lire le message (8 commentaires, moyenne: 2,8).
beh ca
for cle in modes: modes[cle].sort()
ya ptetre une methode plus short, mais en attendant ca te résoud ton problème, et sans copie
le python, c'est bon
-
[^]Re: beh ca
Posté par cho7 (page perso, ) le 16/11/2006 à 08:37. (lien). Évalué à 2.autant pour moi, j'ai mal compris la question. je vais maintenant réfléchir à la *vraie* question :)
--
le python, c'est bon-
[^]Re: beh ca
Posté par cho7 (page perso, ) le 16/11/2006 à 09:01. (lien). Évalué à 2.bon finalement j'ai pas mal de boulot ce matin :)
Mais j'avais commencé à chercher du coté de la modification de la fonction sort() :
def maFonctionDeTri(val1,val2):
#ici trouver comment retourner 1 ou 0 selon les cas
modes["coef"].sort(maFonctionDeTri)
Hope this helps--
le python, c'est bon-
[^]Re: beh ca
-
-
idée
Ta méthode de représentation n'est pas top, top puisque implicitement, tu n'as pas d'association entre tes coef et tes fréquences.
Ce que je ferais :
>>> modes = {'f':[12, 3, 24], 'c':[1, 2, 3]}
# création d'un tableau o temporaire.
>>> o=[]
>>> for i in xrange(len(modes['f'])):
... o.append([modes['f'][i],modes['c'][i]])
...
>>> o
[[12, 1], [3, 2], [24, 3]]
>>> o.sort()
>>> o
[[3, 2], [12, 1], [24, 3]]
# remise en forme.
>>> modes={'f':[],'c':[]}
>>> for i in o:
... modes['f'].append(i[0])
... modes['c'].append(i[1])
...
>>> modes
{'c': [2, 1, 3], 'f': [3, 12, 24]}
et voilà.
http://linuxfr.org/board <-- des moules, du sang, de la violence
zip, sort, unzip
Ce que je ferais, c'est de trier la liste des tuples frequence/coef, et ensuite de remettre les valeurs obtenues dans le dictionnaire :
modes = {'f':[12, 3, 24], 'coef':[1, 2, 3]}
fc = zip(modes['f'], modes['coef']) # fc est la liste de tuples
fc.sort() # fc est maintenant triée suivant le premier argument du tuple
modes['f'] = [i for (i, _) in fc]
modes['coef'] = [j for (i,j) in fc]
Le unzip que j'ai fait est probablement très mauvais, mais je n'ai pas cherché mieux.
-
[^]Re: zip, sort, unzip
-
[^]Re: zip, sort, unzip
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.python



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.