繁体   English   中英

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

[英]Sorting a dict by values inside an inner dict in Python

如果我使用的是不正确的术语,我很抱歉,因为当涉及到数据结构的正确描述时,我有点像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的开发人员来说毫无意义。

在此先感谢您的帮助。

您无法对字典进行排序,但您可以将字典转换为具有表单(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)

你的数据结构是一个字典,字典对它们内部的关联没有排序,所以我要解释“将这个数据结构排序”来表示“从中创建包含(键,值)对的列表”数据结构”。 这可能是也可能不是你想要的。 所以,首先,得到那些对:

pairs = d.items()

(注意:这会在Python 2中返回一个列表;我认为它会在Python 3中返回其他内容,为此您需要显式调用list()以使其成为可以排序的内容,或者调用sorted而不是sort )。 现在根据您的标准排序:

pairs.sort(key = lambda (k,v): v['winPct'])

现在pairs包含你想要的(也许)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM