Упорядочивание списка словарей в Python

Хранение строк вместо ObjectIds приводит к снижению производительности.

ObjectIds меньше , чем эквивалентные строки (они представляют собой 12-байтовое двоичное значение, а не 24-символьное строковое значение UTF-8), поэтому они занимают меньше места в памяти.

Монго действительно быстр, когда индексы & amp; документы находятся в рабочем наборе (т. е. в памяти), поэтому, уменьшая объем данных, вы можете быть уверены, что больше документов останется в памяти. Это особенно важно, потому что поля идентификаторов, о которых вы говорите, часто включаются в индексы.

8
задан Paul Floyd 24 January 2019 в 16:28
поделиться

4 ответа

mylist.sort(key=lambda d: (d['weight'], d['factor']))

или

import operator
mylist.sort(key=operator.itemgetter('weight', 'factor'))
23
ответ дан 5 December 2019 в 06:54
поделиться

Что-то вроде следующего должно работать:

def cmp_dict(x, y):
    weight_diff = y['weight'] - x['weight']
    if weight_diff == 0:
        return y['factor'] - x['factor']
    else:
        return weight_diff

myList.sort(cmp_dict)
1
ответ дан 5 December 2019 в 06:54
поделиться

Я принял ответ dF для вдохновения, но вот что я в конечном итоге выбрал для своего сценария:

@staticmethod
def ordered_list(mylist):
    def sort_func(d):
        return (d['weight'], d['factor'])

    mylist.sort(key=sort_func)
1
ответ дан 5 December 2019 в 06:54
поделиться
decoratedlist = [(item[weight], item) for item in mylist]
decoratedlist.sort()
results = [item for (key, item) in decoratedlist]
-1
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: