开发者

Sorting a dict by values inside an inner dict in Python

开发者 https://www.devze.com 2023-02-22 22:59 出处:网络
My apologies if I am using the incorrect terminology, as I\'m a bit of a Python n00b when it comes to the proper descriptions for data structures.

My apologies if I am using the incorrect terminology, as I'm a bit of a Python n00b when it comes to the proper descriptions for data structures.

I have a data structure that looks like this:

{
    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}
}

I want to sort this data structure by the value in winPct inside the inner dict开发者_JS百科 and searching online has revealed a dazzling array of advice that makes no sense to this raised-on-PHP developer.

Thanks in advance for your help.


You can't sort a dictionary, but you could convert the dictionary into a list of tuples with the form (key, value).

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

To Reverse the sorting as per your comment use:

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


Your data structure is a dictionary, and dictionaries don't have an ordering on the associations inside them, so I'm going to interpret "sort this data structure" to mean "make a list containing the (key,values) pairs from this data structure". This may or may not be what you want. So, first of all, get those pairs:

pairs = d.items()

(note: this returns a list in Python 2; I think it returns something else in Python 3, for which you'd need to call list() explicitly to make it into something you could sort, or call sorted instead of sort). Now sort according to your criterion:

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

and now pairs contains what (perhaps) you want.

0

精彩评论

暂无评论...
验证码 换一张
取 消