Я пытаюсь сортировать dict на основе его ключа и возвращать итератор значениям из переопределенного метода iter в классе. Есть ли более эффективный и эффективный способ сделать это, чем создавать новый список, вставляя в список, когда я сортирую ключи?Сортировка dict на __iter__
ответ
Как о чем-то вроде этого:
def itersorted(d):
for key in sorted(d):
yield d[key]
К самым простым подходом, и почти наверняка самый быстрый, что-то вдоль линий:
def sorted_dict(d):
keys = d.keys()
keys.sort()
for key in keys:
yield d[key]
Вы не можете сортировать не извлекая все ключи. Получение всех ключей в список, а затем сортировка этого списка - самый эффективный способ сделать это; сортировка списка очень быстрая, и выбор списка ключей так же быстро, как может быть. Затем вы можете либо создать новый список значений, либо дать значения, как показано в примере. Имейте в виду, что вы не можете изменить dict, если вы повторяете его (следующая итерация завершится с ошибкой), поэтому, если вы хотите изменить dict до того, как закончите с результатом sorted_dict(), верните ему список ,
Предполагая, что вы хотите сделать заказ на сортировки по умолчанию, вы можете использовали отсортирован (список) или list.sort(). Если вам нужна ваша собственная логика сортировки, списки Python поддерживают возможность сортировки на основе функции, в которой вы проходите. Например, следующее будет способ сортировки чисел от наименьшего до наибольшего (поведение по умолчанию) с использованием функции.
def compareTwo(a, b):
if a > b:
return 1
if a == b:
return 0
if a < b:
return -1
List.Sort(compareTwo)
print a
Этот подход концептуально немного чище, чем ручное создание нового списка и добавления новых значений и позволяет контролировать логику сортировки.
def sortedDict(dictobj):
return (value for key, value in sorted(dictobj.iteritems()))
Это создаст единый промежуточный список, метод sorted() вернет реальный список. Но, по крайней мере, это только один.
- 1. overloaded __iter__ ispassed при получении из dict
- 2. Как определить, вызывается ли __iter__ по dict или list?
- 3. Как внедрить __iter__ в ключи свойства объекта dict
- 4. Сортировка WTForms form.errors dict
- 5. Python - реализовать __iter__ или вернуть список __iter__
- 6. Сортировка списка и Dict ключи
- 7. Сортировка dict в алфавитном порядке
- 8. Сортировка Dict выдает ошибку - питон
- 9. Python Dict() сортировка по DateTime
- 10. Сортировка dict по максимальному значению?
- 11. Сортировка dict по второму значению в кортеже и возврате dict
- 12. Как работает __iter__?
- 13. вызов python встроенный dict на макет
- 14. Как исправить функцию __iter__
- 15. Сортировка dict по субценте в Python
- 16. Сортировка Dict в Словаре в питоне
- 17. , который на самом деле называет метод __iter__
- 18. Python - Сортировка Dict с помощью клавиш кортежей
- 19. Сортировка 10k данных в dict по умолчанию
- 20. Сортировка Dict с кортежами в качестве значений
- 21. Сортировка dict ... эффективный способ сделать это?
- 22. Python: dict и сортировка по алфавиту
- 23. Сортировка списка dicts по Dict значения
- 24. Python: Сортировка вложенной Dict по дате
- 25. Сортировка Dict, значения которого являются объектами Python
- 26. Сортировка dict по числовому значению dict.values
- 27. Сортировка ДИКТ и сохранить как Dict
- 28. Сортировка Список строк, основанный на значении в Dict
- 29. Python Iterate 2D array __iter__
- 30. Какова точка тела метода __iter__?
sorted() фактически составляет промежуточный список. – 2008-09-19 14:51:24