Сортировать по значению (топ 5) в многомерном массиве - PullRequest
2 голосов
/ 06 февраля 2020

У меня есть следующий список:

[{'id': 610603160301469715, 'worth': 0.17},
 {'id': 242730576195354624, 'worth': 0.0},
 {'id': 659311972990451712, 'worth': 0.0},
 {'id': 365975655608745985, 'worth': 0.0},
 {'id': 472141928578940958, 'worth': 0.0},
 {'id': 651499863736844298, 'worth': 0.02},
 {'id': 270904126974590976, 'worth': 0.0},
 {'id': 280497242714931202, 'worth': 0.0},
 {'id': 432610292342587392, 'worth': 0.0},
 {'id': 408785106942164992, 'worth': 0.0},
 {'id': 400900758444310528, 'worth': 0.04},
 {'id': 602213380274651400, 'worth': 0.06},
 {'id': 622692428213780481, 'worth': 0.0}]

Содержит элементы с id и worth. Есть ли способ сортировки по worth? Я действительно не знаю, какие ключевые слова мне нужно искать. Вот почему я спрашиваю здесь в данный момент. Я пытался найти, но не смог найти.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2020

Вы также можете использовать itemgetter.

from operator import itemgetter
sorted(l,key=itemgetter('worth'))

[{'id': 242730576195354624, 'worth': 0.0},
 {'id': 659311972990451712, 'worth': 0.0},
 {'id': 365975655608745985, 'worth': 0.0},
 {'id': 472141928578940958, 'worth': 0.0},
 {'id': 270904126974590976, 'worth': 0.0},
 {'id': 280497242714931202, 'worth': 0.0},
 {'id': 432610292342587392, 'worth': 0.0},
 {'id': 408785106942164992, 'worth': 0.0},
 {'id': 622692428213780481, 'worth': 0.0},
 {'id': 651499863736844298, 'worth': 0.02},
 {'id': 400900758444310528, 'worth': 0.04},
 {'id': 602213380274651400, 'worth': 0.06},
 {'id': 610603160301469715, 'worth': 0.17}]

Чтобы получить 5 самых больших значений, попробуйте это.

top_five=sorted(l,key=itemgetter('worth'))[-5:][::-1]

[{'id': 610603160301469715, 'worth': 0.17},
 {'id': 602213380274651400, 'worth': 0.06},
 {'id': 400900758444310528, 'worth': 0.04},
 {'id': 651499863736844298, 'worth': 0.02},
 {'id': 622692428213780481, 'worth': 0.0}]

Если Вы хотите отсортировать на месте, а затем использовать метод .sort() с key=itemgetter('worth')

l.sort(key=itemgetter('worth')) # .sort() doen't return None. And it modifies the same list.

Если вы сортируете, чтобы получить только первые 5 самых больших, то. Использование heapq не требует сортировки.

from heapq import nlargest
top_five=nlargest(5,l,key=itemgetter('worth'))

[{'id': 610603160301469715, 'worth': 0.17},
 {'id': 602213380274651400, 'worth': 0.06},
 {'id': 400900758444310528, 'worth': 0.04},
 {'id': 651499863736844298, 'worth': 0.02},
 {'id': 242730576195354624, 'worth': 0.0}]
1 голос
/ 06 февраля 2020

Вы можете использовать sorted() с лямбда-выражением в качестве key:

>>> sorted(l, key=lambda x: x['worth'])
[{'id': 242730576195354624, 'worth': 0.0},
 {'id': 659311972990451712, 'worth': 0.0},
 {'id': 365975655608745985, 'worth': 0.0},
 {'id': 472141928578940958, 'worth': 0.0},
 {'id': 270904126974590976, 'worth': 0.0},
 {'id': 280497242714931202, 'worth': 0.0},
 {'id': 432610292342587392, 'worth': 0.0},
 {'id': 408785106942164992, 'worth': 0.0},
 {'id': 622692428213780481, 'worth': 0.0},
 {'id': 651499863736844298, 'worth': 0.02},
 {'id': 400900758444310528, 'worth': 0.04},
 {'id': 602213380274651400, 'worth': 0.06},
 {'id': 610603160301469715, 'worth': 0.17}]

Для получения 5 верхних элементов:

>>> sorted(l, key=lambda x: x['worth'], reverse=True)[:5]
[{'id': 610603160301469715, 'worth': 0.17},
 {'id': 602213380274651400, 'worth': 0.06},
 {'id': 400900758444310528, 'worth': 0.04},
 {'id': 651499863736844298, 'worth': 0.02},
 {'id': 242730576195354624, 'worth': 0.0}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...