2012-04-14 167 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)])