我试图删除数组中所有重复和空元素,然后对其进行排序。
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来避免这种情况。
答案 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(..)
仅会导致构建列表所需的工作更多。