如果我使用的是不正确的术语,我表示道歉,因为当涉及到数据结构的正确描述时,我有点像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开发者来说毫无意义。
提前感谢您的帮助。
答案 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'])
包含您想要的内容。