Django 排序时:'<';在';非类型';和';str';

Django 排序时:'<';在';非类型';和';str';,django,python-3.x,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 异常值: “您的过滤器(无,城市)没有做任何事情,因为过滤器(…)本身不会过滤列表,它会使用过滤的元素创建一个it

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

    cities = [js.city for js in company_jscollects]
    filter(None, cities)
    cities_unique = list(sorted(set(cities)))
但后来我犯了一个错误:

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

“您的
过滤器(无,城市)
没有做任何事情,因为
过滤器(…)
本身不会过滤列表,它会使用过滤的元素创建一个iterable

您可以使用:

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})

由于
排序(…)
总是返回一个列表,额外的
列表(…)
只会导致更多的工作来构建一个列表。

filter
不修改列表,您可能需要
cities=filter(None,cities)
但在这种情况下,您最好将上面的行更改为
cities=[js.city for js in company\u js如果js.city收集信息]