2017-06-05 6 views
0

値が空であるかどうかに基づいてソートされたディクショナリ値のリストを作成する必要があります。これを一度だけ繰り返す方法がありましたか?私の実際の辞書には50,000値のように含まれており、繰り返しPythonは属性に基づいて並べ替えられたリストを作成します

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) 

をそれをやったときに一度だけ反復すると、いくつかの時間を節約できますこれは私の所望の出力です:

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

答えて

3

あなたは長さに関してソートすることができます:

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

私はSortedContainersを提案します:SortedList、SortedDict、およびSortedSet型の高速Python実装。

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

res=SortedList(d.values()) 
関連する問題