2016-04-11 12 views
1

Ich habe eine defaultdict wie:Wie kann ich eine defaultdict von Liste nach Länge der Liste sortieren

d = {'a':[1], 'b':[2,3,4], 'c':[5,6]} 

erwarte ich:

sorted_d = {'b':[2,3,4], 'c':[5,6], 'a': [1]} 

Wie kann ich es durch die Länge der Liste sortieren?

+2

Sie eine OrderedDict benötigen. –

+0

Ich habe 'sorted_d = sortiert (d.items(), key = lamda x: len (x), reverse = True)' versucht aber – Mike

+0

Schließen. 'len (x [1])' wäre wahrscheinlich besser :-) –

Antwort

0

defaultdict s - wie normale Wörterbücher - haben keine Reihenfolge.

Wenn Sie nur in einer sortierten Art und Weise über sie iterieren wollen:

for key in sorted(d, key=lambda x:len(d[x]), reverse=True): 
    ... 
3

Wörterbücher in Python sind nicht geordnet.

Verwendung collections.OrderedDict:

>>> d = {'a':[1], 'b':[2,3,4], 'c':[5,6]} 
>>> from collections import OrderedDict 
>>> OrderedDict(sorted(d.items(), key=lambda item: len(item[1]), reverse=True)) 
OrderedDict([('b', [2, 3, 4]), ('c', [5, 6]), ('a', [1])]) 
+0

danke für deine antwort. es funktioniert, aber ich bevorzuge L3viathan Weg :) – Mike