代码之家  ›  专栏  ›  技术社区  ›  Nadir Bounoua

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

  •  1
  • Nadir Bounoua  · 技术社区  · 5 年前

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

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

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

    Django版本:2.0.4 异常类型:类型错误 异常值:

    “nonetype”和“str”的实例之间不支持“<”

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

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

    我很困惑,因为错误告诉我们没有任何元素可以与字符串进行比较,但是我首先使用了过滤器来避免这种情况。

    1 回复  |  直到 5 年前
        1
  •  2
  •   willeM_ Van Onsem    5 年前

    你的 filter(None, cities) 什么都没做,因为 filter(..) 本身做 过滤列表,它用过滤后的元素创建一个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})
    

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