Как Иоанн Махлин сказал, что вы не можете сортировать словарь Python.
Однако вы можете создать индекс ключей, которые могут быть отсортированы в любом порядке.
Предпочтительный шаблон Python (идиома) для сортировки по любому альтернативному критерию называется «украсить-сортировать-undecorate» (DSU). В этой идиоме вы создаете временный список, который содержит кортежи вашего ключа (ов), за которыми следуют ваши исходные элементы данных, затем вызывайте обычный метод .sort() в этом списке (или, в более поздних версиях Python просто оберните украшение в названии отсортировано() встроенная функция). Затем вы удаляете «украшения».
Причина этого, как правило, предпочтительнее, чем прохождение функции сравнения в .sort() метода является то, что Python встроенного кода сортировки по умолчанию (составитель C в обычном C Python) является очень быстрым и эффективным в случае, если по умолчанию , но намного, намного медленнее, когда ему приходится многократно называть код объекта Python, много раз в случае, отличном от стандартного. Поэтому обычно лучше перебирать данные, создавая структуры данных, которые могут быть переданы в стандартные процедуры сортировки.
В этом случае вы должны быть в состоянии использовать что-то вроде:
[y[1] for y in sorted([(myDict[x][2], x) for x in myDict.keys()])]
... это список понимание делает undecorate из отсортированного списка кортежей, который возвращается внутренним списком понимания. Внутреннее понимание создает набор кортежей, желаемый ключ сортировки (третий элемент списка) и ключ словаря, соответствующий клавише сортировки. myDict.keys() - это, конечно, метод словарей Python, который возвращает список всех допустимых ключей в любом порядке, выбранном базовой реализацией, предположительно простой итерацией по хэшам.
Более подробный способ сделать это, возможно, будет легче читать:
temp = list()
for k, v in myDict.items():
temp.append((v[2],))
temp.sort()
results = list()
for i in temp:
results.append(i[1])
Обычно вы должны создали такой код итеративно, в интерпретаторе с использованием малых выборок данных. Постройте выражение «украсить» или функцию. Затем оберните это при вызове отсортированным(). Затем создайте выражение undecorate (которое обычно так же просто, как и показано здесь).
Как только я задал вопрос, у меня появилось прозрение и в основном придумал то же самое, кроме лямбды (еще не узнал о них). Просто написал мою собственную функцию cmp, которая берет tupples из dict.items() и возвращает результат. То же самое, просто другой способ написать это. Большое спасибо за быстрый ответ! – jay
Отличное решение. Мне нравится простота 'sorted()'. –
Я думаю, что это немного яснее: sorted (myDict.items(), key = lambda (k, v): v [2]) –