2012-04-14 165 views
0

內排序字典我想主要有我的字典的名單,看起來像的排序列表:提前
Python列表排序,列表

similarity = [{'Ben': 49}, {'Moose': 18}, {'Reuven': 39}, {'Cust1': 58}, {'Cust2': 10}, {'Francois': 58}, {'Jim C': 39}, {'Iren': 13}, {'Cust3': 13}] 

任何幫助表示讚賞,並感謝。

+2

我能問你爲什麼使用單次入境詞典列表?這些可以合併成一個單一的字典? – senderle 2012-04-14 22:19:45

+1

@senderle:或者也許他可以使用元組列表... – rubik 2012-04-14 22:31:09

回答

1

這是一種做法。

>>> sorted(similarity, key=lambda x: x.values()[0]) 
[{'Cust2': 10}, {'Iren': 13}, {'Cust3': 13}, {'Moose': 18}, {'Reuven': 39}, {'Jim C': 39}, {'Ben': 49}, {'Cust1': 58}, {'Francois': 58}] 
4

你應該使用此元組的列表:

>>> lst = [d.items()[0] for d in similarity] 
>>> lst 
[('Ben', 49), ('Moose', 18), ('Reuven', 39), ('Cust1', 58), ('Cust2', 10), ('Francois', 58), ('Jim C', 39), ('Iren', 13), ('Cust3', 13)] 

然後,你可以整理之如常。

>>> from operator import itemgetter 
>>> sorted(lst, key=itemgetter(1)) 
[('Cust2', 10), ('Iren', 13), ('Cust3', 13), ('Moose', 18), ('Reuven', 39), ('Jim C', 39), ('Ben', 49), ('Cust1', 58), ('Francois', 58)] 

如果你願意,你也可以使用一個單一的,ordered dictionary持有的價值觀:

>>> from collections import OrderedDict 
>>> OrderedDict(sorted(lst, key=itemgetter(1))) 
OrderedDict([('Cust2', 10), ('Iren', 13), ('Cust3', 13), ('Moose', 18), ('Reuven', 39), ('Jim C', 39), ('Ben', 49), ('Cust1', 58), ('Francois', 58)])