django - 排序时:“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 行是包含排序函数的行。
我很困惑,因为错误表明没有元素与字符串进行比较,但我首先使用过滤器来避免这种情况。
解决方案
您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(..)
只会导致更多的工作来构建一个列表。
推荐阅读
- c++ - C++ - 俄罗斯方块碎片(使用数组)
- verilog - Verilog 测试台中的信号未从初始状态继续前进
- typo3 - Typo3:控制器和 HTML 模板之间的缓存
- vba - 关闭工作簿会破坏变量吗?
- android - Android Facebook Login Sdk:getActivity().getCallingActivity() 从他们的 LoginFragment.class 返回 null
- javascript - 提交功能上的 Ajax 不起作用
- vba - 在与“Dim”相同的行上使用“=”时预期语句结束
- windows - 试图让bat文件以窗口模式打开暗黑破坏神2
- cakephp - 如何使 Text::slug() 正确转换德语变音符号?
- android - 片段中的 OnActivityResult