2017-02-21 2 views
4

ich eine Liste der Wörterbücher wie diese haben:Python - Verschieben Elemente in einer Liste von Wörterbüchern zum Ende der Liste

lst = [ 
    {'id': 1, 'language': 'it'}, 
    {'id': 2, 'language': 'en'}, 
    {'id': 3, 'language': 'es'}, 
    {'id': 4, 'language': 'en'} 
    ] 

Ich möchte jedes Wörterbuch bewegen, die language != 'en' bis zum Ende der Liste während die Reihenfolge anderer Ergebnisse beibehalten wird. So sollte die Liste wie folgt aussehen:

lst = [ 
    {'id': 2, 'language': 'en'}, 
    {'id': 4, 'language': 'en'}, 
    {'id': 1, 'language': 'it'}, 
    {'id': 3, 'language': 'es'} 
    ] 

Antwort

10

Verwenden Sortierung. Idee ist zu sortieren, ob 'language' gleich ist oder nicht. Wenn die Sprache gleich 'en' ist, wird die Tastenfunktion False else True (False < True) zurückgeben. Da Pythons Sortierung stabil ist, bleibt die Reihenfolge erhalten.

>>> sorted(lst, key=lambda x: x['language'] != 'en') 
[{'id': 2, 'language': 'en'}, 
{'id': 4, 'language': 'en'}, 
{'id': 1, 'language': 'it'}, 
{'id': 3, 'language': 'es'}] 
+2

Sie könnte hinzufügen, dass es funktioniert, weil Python Art _stabilen_ –

+0

@ Jean-FrançoisFabre Ja, ich war in der Mitte es zu bearbeiten. :-) –

Verwandte Themen