在Python中用内部字典中的值对字典进行排序

时间:2011-04-08 23:55:26

标签: python sorting

如果我使用的是不正确的术语,我表示道歉,因为当涉及到数据结构的正确描述时,我有点像Python n00b。

我有一个如下所示的数据结构:

{
    u'COU': {'hl': 39, 'hw': 42, 'winPct': Decimal('0.5471698113207547169811320755'), 'al': 36, 'l': 72, 'w': 87, 'aw': 45}, 
    u'MIN': {'hl': 42, 'hw': 39, 'winPct': Decimal('0.3559322033898305084745762712'), 'al': 57, 'l': 114, 'w': 63, 'aw': 24}, 
    u'BOW': {'hl': 36, 'hw': 44, 'winPct': Decimal('0.5432098765432098765432098765'), 'al': 37, 'l': 74, 'w': 88, 'aw': 44}
}

我想通过内部字典中的winPct中的值对这个数据结构进行排序,并且在线搜索已经发现了一系列令人眼花缭乱的建议,这对于这个PHP开发者来说毫无意义。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您无法对字典进行排序,但您可以将字典转换为格式(key, value)的元组列表。

sorted_d = sorted(d.iteritems(), key=lambda v: v[1]['winPct'])

根据您的评论使用来反转排序:

sorted_d = sorted(d.iteritems(), key=lambda v: v[1]['winPct'], reverse=True)

答案 1 :(得分:0)

您的数据结构是字典,字典对其内部的关联没有排序,因此我将解释“对此数据结构进行排序”以表示“制作包含(键,值)的列表来自这个数据结构的对“。这可能是也可能不是你想要的。所以,首先,得到那些对:

pairs = d.items()

(注意:这会在Python 2中返回一个列表;我认为它会在Python 3中返回其他内容,您需要明确地调用list()以使其成为您可以排序的内容,或者调用{ {1}}代替sorted)。现在按照您的标准排序:

sort

现在pairs.sort(key = lambda (k,v): v['winPct']) 包含您想要的内容。