2015-03-09 1 views
-1

J'ai un dict:dictionnaire de tri basé sur la valeur en utilisant Python

self.currentMsg={'Decimal Label value':'','SDI value':'','Label format':''} 

for i in range (self.firstRowIdx, self.lastRowIdx) : 
     self.currentMsg['Decimal Label value']=self.xlManager.getCellValue(i,LABEL_COL_IDX) 


self.currentMsg['SDI value']= SDIValue=self.xlManager.getCellValue(i,SDI_COL_IDX) 
     self.currentMsg['Label format']=LabelFormat=self.xlManager.getCellValue(i,FORMAT_COL_IDX) 
sorted_x = sorted(self.currentMsg.items(),key=operator.itemgetter('Decimal Label value')) 
     print(sorted_x) 

Je voudrais trier la dict basée sur la valeur croissante de la «valeur d'étiquette décimale.

J'ai essayé ceci:

sorted_x = sorted(self.currentMsg.items(), key=itemgetter(''Decimal Label value'')) 

mais je reçois cette erreur

TypeError: tuple indices must be integers, not str 

j'ai essayé ceci:

sorted_x = sorted(self.currentMsg.items(), key=itemgetter('0')) 

mais le dict est toujours pas triai . la console montre:

[('Decimal Label value', 324.0), ('Label format', 'BNR'), ('SDI value', 'XX')] 
[('Decimal Label value', 331.0), ('Label format', 'BNR'), ('SDI value', 'XX')] 

[('Decimal Label value', 312.0), ('Label format', 'BNR'), ('SDI value', 'XX')] 
+0

Voir aussi: http://stackoverflow.com/questions/289/how-do-you-sort-a-dictionary-by-value?rq=1 – EdChum

Répondre

1

Il semble que vous pourriez avoir une liste de dicts, pas un dict.

Par conséquent, essayez:

sorted_x = sorted(self.currentMsg, 
    key=operator.itemgetter('Decimal Label value')) 

À la réflexion, puisque vous utilisez self.currentMsg.items() et il n'a pas soulevé d'AttributeError, il semble self.currentMsg est probablement un dict. Alors self.currentMsg.items() serait un tuple de paires clé/valeur. Ceci contredit votre première déclaration, puisqu'elle montre seulement une séquence de 3 dicts.

Pour répondre à votre demande, nous avons besoin de voir à quoi ressemble vraiment self.currentMsg.

+0

J'ai essayé mais j'ai cette erreur, TypeError : les indices de tuple doivent être des entiers, pas str – user3801697

+2

@ user3801697: et vous avez des tuples où exactement? Veuillez poster un échantillon reproductible dans votre question, quelque chose qui peut être utilisé directement. –