Сортировка, когда значения равны None или пустые строки python

У меня есть список со словарями, в котором я сортирую их по разным значениям. Я делаю это с этими строками кода:

def orderBy(self, col, dir, objlist): if dir == 'asc': sorted_objects = sorted(objlist, key=lambda k: k[col]) else: sorted_objects = sorted(objlist, key=lambda k: k[col], reverse=True) return sorted_objects 

Теперь проблема в том, что я иногда имею нулевые значения или пустые строки при попытке сортировки, а затем все это ломается.

Я не уверен, но я думаю, что это исключение, которое вызывается: unorderable types: NoneType () <NoneType (). Это происходит, когда в столбце, который я пытаюсь сортировать, нет значений None. Для пустых значений строки он работает, хотя они заканчиваются первым в списке, но я бы хотел, чтобы они были последними.

Как я могу решить эту проблему?

One Solution collect form web for “Сортировка, когда значения равны None или пустые строки python”

Если вы хотите, чтобы значения « None и '' отображались последними, вы можете вернуть свою key функцию кортежем, поэтому список сортируется по естественному порядку этого кортежа. Кортеж имеет форму (is_none, is_empty, value) ; таким образом, кортеж для значения None будет (1, 0, None) , для '' is (0, 1, '') и для чего-либо еще (0, 0, "anything else") . Таким образом, сначала будут отсортированы правильные строки, затем пустые строки и, наконец, None .

Пример:

 >>> list_with_none = [(1,"foo"), (2,"bar"), (3,""), (4,None), (5,"blub")] >>> col = 1 >>> sorted(list_with_none, key=lambda k: (k[col] is None, k[col] == "", k[col])) [(2, 'bar'), (5, 'blub'), (1, 'foo'), (3, ''), (4, None)] 
  • Почему Python «Ошибка памяти» с списком `append ()` осталось много ОЗУ
  • Базовые индексирующие рекурсии подстроки в строке (python)
  • Количество элементов Python в словаре списков
  • Анаконда Python 32-бит пытается загрузить 64-битные библиотеки Anaconda
  • Сортировка списка с пользовательским заказом в Python
  • Преобразование пользовательского ввода в имя списка
  • Python - странное поведение с dicts в списке
  • Найдите пересечение двух списков?
  •  
    Interesting Posts for Van-Lav

    сельдерей, как реализовать одиночную очередь с несколькими работниками, выполняющимися параллельно

    в сценариях Python, как я могу получить вывод из файла subprocess.call в файл

    Tensorflow Slim: TypeError: ожидается int32, получился список, содержащий тензоры типа '_Message' вместо

    лучший способ реализации пользовательских принтеров

    Pandas read_csv на файле объемом 6.5 ГБ потребляет более 170 ГБ ОЗУ

    Проблема с расширением Python

    Таймеры из данных CSV (отметка времени и события)

    Переписывание существующих ячеек в файле XLSX с использованием Python

    Surf отсутствует в opencv 2.4 для python

    Регулярное выражение Python: сопоставление скобок в скобках

    Pygame: невозможно открыть файл .mp3

    Python webbrowser.open (), чтобы открыть браузер Chrome

    Почему чтение нескольких файлов происходит в то же время медленнее, чем чтение последовательно?

    Самый быстрый способ удалить строку из большого файла в Python

    Откройте новую вкладку в Firefox, используя Selenium WebDriver на Mac

    Python - лучший язык программирования в мире.