首页 > 解决方案 > 排序时:“NoneType”和“str”的实例之间不支持“<”

问题描述

我正在尝试删除数组的所有重复元素和空元素,然后对其进行排序。

    cities = [js.city for js in company_jscollects]
    filter(None, cities)
    cities_unique = list(sorted(set(cities)))

但后来我得到了这个错误:

Django 版本:2.0.4 异常类型:TypeError 异常值:

'NoneType' 和 'str' 的实例之间不支持 '<'

异常位置:D:..\views.py indashboard_analytics,第 175 行

第 175 行是包含排序函数的行。

我很困惑,因为错误表明没有元素与字符串进行比较,但我首先使用过滤器来避免这种情况。

标签: djangopython-3.x

解决方案


filter(None, cities)没有做任何事情,因为filter(..)它本身不会过滤列表,它会使用过滤后的元素创建一个迭代。

您可以使用:

cities = [js.city for js in company_jscollects]
cities_unique = list(sorted(set(filter(None, cities))))

或者可能更优雅:

cities_unique = sorted({js.city for js in company_jscollects if js.city})

因为sorted(..)总是返回一个列表,额外的list(..)只会导致更多的工作来构建一个列表。


推荐阅读