2016-07-19 6 views
-1

Ich habe diese Liste:sortierte Liste von Listen, die jeweils ein Wörterbuch

list_users= [[{'points': 9, 'values': 1, 'division': 1, 'user_id': 3}], [{'points': 3, 'values': 0, 'division': 1, 'user_id': 1}], [{'points': 2, 'values': 0, 'division': 1, 'user_id': 4}], [{'points': 9, 'values': 0, 'division': 1, 'user_id': 11}], [{'points': 3, 'values': 0, 'division': 1, 'user_id': 10}], [{'points': 100, 'values': 4, 'division': 1, 'user_id': 2}], [{'points': 77, 'values': 2, 'division': 1, 'user_id': 5}], [{'points': 88, 'values': 3, 'division': 1, 'user_id': 6}], [{'points': 66, 'values': 1, 'division': 1, 'user_id': 7}], [{'points': 2, 'values': 0, 'division': 1, 'user_id': 8}]] 

Ich brauche die Liste von Punkten und Werten zu sortieren.

Wie kann ich es sortieren, wenn dict in einer Liste in der Hauptliste ist?

Ich habe diese Liste nach Abfrage generiert und dann einfach an list_users anhängen?

+1

Mögliche Duplikat [Welche Argumente hat Python Sortierfunktion? ] (http://stackoverflow.com/questions/1972672/what-arguments-does-python-sort-function-have) –

+1

Sie s sollte _seriously_ erwägen, den Code, der diese Liste erstellt, neu zu schreiben, so dass er eine einfache Liste von Dicts erzeugt. Jedes dieser dicts innerhalb einer Ein-Element-Liste zu haben, ist sinnlos. –

Antwort

2

Sortieren Sie mit einem key function for sorted, die ein Tupel von points und values für jedes Diktat in jeder Liste erstellt.

def kf(x): 
    return (x[0]["points"], x[0]["values"]) 
s = sorted(list_users, key=kf) 
print(s) 

Ausgang:

[[{'division': 1, 'points': 2, 'user_id': 4, 'values': 0}], 
[{'division': 1, 'points': 2, 'user_id': 8, 'values': 0}], 
[{'division': 1, 'points': 3, 'user_id': 1, 'values': 0}], 
[{'division': 1, 'points': 3, 'user_id': 10, 'values': 0}], 
[{'division': 1, 'points': 9, 'user_id': 11, 'values': 0}], 
[{'division': 1, 'points': 9, 'user_id': 3, 'values': 1}], 
[{'division': 1, 'points': 66, 'user_id': 7, 'values': 1}], 
[{'division': 1, 'points': 77, 'user_id': 5, 'values': 2}], 
[{'division': 1, 'points': 88, 'user_id': 6, 'values': 3}], 
[{'division': 1, 'points': 100, 'user_id': 2, 'values': 4}]] 
3

Besuchen Sie das Wörterbuch points und values von Indizierung auf der inneren Liste enthält:

list_users_sorted = sorted(list_users, key=lambda x: (x[0]['points'], x[0]['values'])) 
#              ^   ^
+0

Ist es möglich, ein neues Feld innerhalb jeder Position im Wörterbuch hinzuzufügen? – 62009030

+0

In jedem dict add 'Position': (Nummer der Position, wenn sortiert ist) – 62009030

+0

Ja, es ist möglich. Iterate durch die sortierte Liste mit 'enumerate' und für das Wörterbuch in jeder Unterliste, füge einen neuen Schlüssel als' 'position'' und den Wert als Indexwert von 'enumerate' hinzu. –

Verwandte Themen