Сортировка dict по значениям внутри внутреннего dict в Python - PullRequest
0 голосов
/ 09 апреля 2011

Приношу свои извинения, если я использую неправильную терминологию, поскольку я немного похож на 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 ]

2 голосов
/ 09 апреля 2011

Вы не можете отсортировать словарь, но вы можете преобразовать словарь в список кортежей с формой (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)
0 голосов
/ 09 апреля 2011

Ваша структура данных - это словарь, и словари не имеют порядка ассоциаций внутри них, поэтому я собираюсь интерпретировать «сортировать эту структуру данных» как «создать список, содержащий (ключ, значения)»пары из этой структуры данных ".Это может или не может быть то, что вы хотите.Итак, прежде всего, получите эти пары:

pairs = d.items()

(примечание: это возвращает список в Python 2; я думаю, что он возвращает что-то еще в Python 3, для которого вам нужно будет вызвать list() явно, чтобы превратить это во что-то, что вы могли бы отсортировать, или вызвать sorted вместо sort).Теперь сортируйте по вашему критерию:

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

и теперь pairs содержит то, что (возможно) вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...