2017-07-16 5 views
0

J'ai un tuple dans la variable selectedColumns:Trier un tuple par un nom de colonne en Python OrderedDict

Comment trier le ordereddict suivant() liste de tuples par un nom de colonne?

OrderedDict([('Country', '93535'), ('City', '72046'), ('Crime', '28'), ('Males', '34879'), ('Females', '37167'), ('Total PPL', '20672'), ('Size', '3')]) 
OrderedDict([('Country', '93536'), ('City', '70918'), ('Crime', '34'), ('Males', '37804'), ('Females', '33114'), ('Total PPL', '20964'), ('Size', '3')]) 
OrderedDict([('Country', '93543'), ('City', '13033'), ('Crime', '32'), ('Males', '6695'), ('Females', '6338'), ('Total PPL', '3560'), ('Size', '3')]) 
OrderedDict([('Country', '93544'), ('City', '1259'), ('Crime', '52'), ('Males', '689'), ('Females', '570'), ('Total PPL', '569'), ('Size', '2')]) 
OrderedDict([('Country', '93550'), ('City', '74929'), ('Crime', '27'), ('Males', '36414'), ('Females', '38515'), ('Total PPL', '20864'), ('Size', '3')]) 
OrderedDict([('Country', '93551'), ('City', '50798'), ('Crime', '37'), ('Males', '25056'), ('Females', '25742'), ('Total PPL', '15963'), ('Size', '3')]) 
OrderedDict([('Country', '93552'), ('City', '38158'), ('Crime', '28'), ('Males', '18711'), ('Females', '19447'), ('Total PPL', '9690'), ('Size', '3')]) 
OrderedDict([('Country', '93553'), ('City', '2138'), ('Crime', '43'), ('Males', '1121'), ('Females', '1017'), ('Total PPL', '816'), ('Size', '2')]) 

C'est ce que j'ai jusqu'à présent pour Trier par ZipCode. Ouvert à vos suggestions/idées

for row in selectedColumns: 
     sorted(row, key=lambda x:x[1], reverse=True) 
+0

COMMEnT ce que tu n'as pas travaillé? Aussi pouvez-vous montrer votre entrée et sortie attendue? Pouvons-nous par exemple supposer que 'global_listOf_selectedColumn' est une liste contenant les dicts ordonnés ci-dessus? On dirait que vous ne capturez pas le résultat de 'trié ', donc il y a une raison pour laquelle ça ne marchera pas. Même si les données contenues dans OrderedDict ressemblent à un tuple, ce n'est pas le cas (hashtable avec l'ordre de dictée de la liste chaînée). Vous devrez probablement trier les éléments dict et créer un nouveau OrderedDict. –

+0

@PaulRooney a corrigé l'itération de tuple dans la boucle for. Oui c'est une liste contenant les données ci-dessus. – user2501165

+0

Je ne suis pas tout à fait clair sur ce que vous demandez, mais est-ce que [ce] (https://ideone.com/C6krEk) est proche? Je suggère que vous pouvez omettre le paramètre 'key' puisque les éléments seront déjà triés par les clés d'entrée OrderedDicts. –

Répondre

0

Si j'ai bien compris votre question, vous essayez de trier la liste de OrderedDict.

La fonction triée renvoie la copie de la liste d'entrée. Par conséquent, vous n'avez pas besoin de parcourir chaque élément de votre liste comme ce que vous faites. Au lieu de cela il suffit d'appliquer directement à votre liste

On suppose que votre liste ressemble à ceci

from collections import OrderedDict 
selectedColumns = [ 
OrderedDict([('Country', '93535'), ('City', '72046'), ('Crime', '28'), ('Males', '34879'), ('Females', '37167'), ('Total PPL', '20672'), ('Size', '3')]), 
OrderedDict([('Country', '93536'), ('City', '70918'), ('Crime', '34'), ('Males', '37804'), ('Females', '33114'), ('Total PPL', '20964'), ('Size', '3')]), 
OrderedDict([('Country', '93543'), ('City', '13033'), ('Crime', '32'), ('Males', '6695'), ('Females', '6338'), ('Total PPL', '3560'), ('Size', '3')]), 
OrderedDict([('Country', '93544'), ('City', '1259'), ('Crime', '52'), ('Males', '689'), ('Females', '570'), ('Total PPL', '569'), ('Size', '2')]), 
OrderedDict([('Country', '93550'), ('City', '74929'), ('Crime', '27'), ('Males', '36414'), ('Females', '38515'), ('Total PPL', '20864'), ('Size', '3')]), 
OrderedDict([('Country', '93551'), ('City', '50798'), ('Crime', '37'), ('Males', '25056'), ('Females', '25742'), ('Total PPL', '15963'), ('Size', '3')]), 
OrderedDict([('Country', '93552'), ('City', '38158'), ('Crime', '28'), ('Males', '18711'), ('Females', '19447'), ('Total PPL', '9690'), ('Size', '3')]), 
OrderedDict([('Country', '93553'), ('City', '2138'), ('Crime', '43'), ('Males', '1121'), ('Females', '1017'), ('Total PPL', '816'), ('Size', '2')]) 
] 

et la liste de tri doit être

ordered = sorted(selectedColumns, key= lambda element: element['City']) 
ordered2 = sorted(selectedColumns, key= lambda element: element['anyKeyYourLike']) 

Vérifiez votre sortie

for obj in ordered: 
    print(obj)