python:对嵌套字典进行排序

时间:2011-11-21 19:07:56

标签: python dictionary nested

我有一个类型嵌套的字典

{id_1 : [ {id_2:score},{id_3:score_2} .... and so on],id_2 :[{id_1:Score_!....]}

所以基本上是一个嵌套字典 现在我想根据得分对每个主要ID进行排序 所以基本上

{id_1: [{element with max_score},{element_with next max_score....}]... id_2:[{element_with max_score},{element_with next maxx score}...]

此外,该函数应该采用参数say(n)返回前n个匹配或者如果n<该id的元素数量然后返回完整列表 任何想法/想法.. 感谢

1 个答案:

答案 0 :(得分:3)

您可以使用key参数list.sort()。假设外部字典名为d,代码可能如下所示:

for scores in d.itervalues():
    scores.sort(key=lambda x: next(x.itervalues()), reverse=True)

lambda函数只是提取字典的单个值。

我认为你最好不要使用元组而不是字典作为列表的值:

{id_1: [(id_2, score_2), (id_3, score_3),...], id_2: [(id_1, score_1),...]}

使用此数据结构,排序代码将是

for scores in d.itervalues():
    scores.sort(key=lambda x: x[1], reverse=True)

或等效,但稍快一点

for scores in d.itervalues():
    scores.sort(key=operator.itemgetter(1), reverse=True)