2017-06-05 2 views
0
erstellen

Ich muss eine Liste von Wörterbuchwerten erstellen, sortiert, je nachdem, ob der Wert leer ist oder nicht, mein Versuch erhält die gewünschte Ausgabe, muss aber zweimal über das Wörterbuch iterieren, ich frage mich, ob gab es einen Weg dies nur einmal zu tun? Meine eigentliche Wörterbuch enthält wie 50.000 Werte und Iterieren würde nur einmal etwas Zeit sparen, wenn es immer wieder tunPython sortierte Liste basierend auf Attribut

d = {'id1':[], 
    'id2':[1], 
    'id3':[1]} 
l = [v for v in d.values() if v]+[v for v in d.values() if not v] 
print (l) 

das ist meine gewünschte Ausgabe:

[[1], [1], []] 

Antwort

3

Sie in Bezug auf Länge sortieren:

l = sorted(d.values(), key=len, reverse=True) 
1

Ich empfehle SortedContainers: Schnelle, reine Python-Implementierung von SortedList-, SortedDict- und SortedSet-Typen.

from sortedcontainers import SortedList 
d = {'id1':[], 
    'id2':[1], 
    'id3':[1]} 

res=SortedList(d.values()) 
Verwandte Themen