Хранение строк вместо ObjectIds приводит к снижению производительности.
ObjectIds меньше , чем эквивалентные строки (они представляют собой 12-байтовое двоичное значение, а не 24-символьное строковое значение UTF-8), поэтому они занимают меньше места в памяти.
Монго действительно быстр, когда индексы & amp; документы находятся в рабочем наборе (т. е. в памяти), поэтому, уменьшая объем данных, вы можете быть уверены, что больше документов останется в памяти. Это особенно важно, потому что поля идентификаторов, о которых вы говорите, часто включаются в индексы.
mylist.sort(key=lambda d: (d['weight'], d['factor']))
или
import operator
mylist.sort(key=operator.itemgetter('weight', 'factor'))
Что-то вроде следующего должно работать:
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)
Я принял ответ dF для вдохновения, но вот что я в конечном итоге выбрал для своего сценария:
@staticmethod
def ordered_list(mylist):
def sort_func(d):
return (d['weight'], d['factor'])
mylist.sort(key=sort_func)
decoratedlist = [(item[weight], item) for item in mylist]
decoratedlist.sort()
results = [item for (key, item) in decoratedlist]