首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >值为None或空字符串时排序python

值为None或空字符串时排序python
EN

Stack Overflow用户
提问于 2015-06-22 17:13:33
回答 1查看 6.9K关注 0票数 4

我有一个字典列表,其中我根据不同的值对它们进行排序。我用下面这几行代码来实现:

代码语言:javascript
复制
def orderBy(self, col, dir, objlist):
    if dir == 'asc':
        sorted_objects = sorted(objlist, key=lambda k: k[col])
    else:
        sorted_objects = sorted(objlist, key=lambda k: k[col], reverse=True)
    return sorted_objects

现在的问题是,当我尝试排序时,偶尔会有空值或空字符串,然后它们都会崩溃。

我不确定,但我认为这是抛出的异常:不可排序的类型: NoneType() < NoneType()。当我尝试排序的列上没有值时,就会发生这种情况。对于空字符串的值,它是有效的,尽管它们在列表中排在第一,但我希望它们排在最后。

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 17:57:14

如果希望None''值出现在最后,可以让key函数返回一个元组,这样列表就会按该元组的自然顺序排序。元组的形式为(is_none, is_empty, value);这样,None值的元组将为(1, 0, None),对于''(0, 1, ''),对于任何其他值为(0, 0, "anything else")。因此,这将首先对正确的字符串进行排序,然后是空字符串,最后是None

示例:

代码语言:javascript
复制
>>> list_with_none = [(1,"foo"), (2,"bar"), (3,""), (4,None), (5,"blub")]
>>> col = 1
>>> sorted(list_with_none, key=lambda k: (k[col] is None, k[col] == "", k[col])) 
[(2, 'bar'), (5, 'blub'), (1, 'foo'), (3, ''), (4, None)]
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30976124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档