排序时:“ NoneType”和“ str”的实例之间不支持“ <”

时间:2019-01-16 10:46:42

标签: django python-3.x

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

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

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

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

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

异常位置:dashboard_analytics中的D:.. \ views.py,第175行

第175行是包含排序功能的行。

我很困惑,因为该错误表明没有None元素与Strings进行比较,但是我首先使用filter来避免这种情况。

1 个答案:

答案 0 :(得分:2)

您的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(..)仅会导致构建列表所需的工作更多。