Eit*_*tre 0 python sorting null list
我有一个带有字典的列表,在其中按不同的值对它们进行排序。我正在使用以下代码行:
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
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我尝试排序时,偶尔会出现空值或空字符串,然后一切都崩溃了。
我不确定,但是我认为这是引发的异常:不可排序的类型:NoneType()<NoneType()。当我尝试排序的列上没有值时,就会发生这种情况。对于空字符串值,尽管它们在列表中排在最后,但它可以工作,但我希望它们排在最后。
我怎么解决这个问题?
如果希望None和''值最后出现,则可以让key函数返回一个元组,因此列表按该元组的自然顺序排序。元组具有形式(is_none, is_empty, value); 这样,一个None值的元组将是(1, 0, None),为''is (0, 1, '')和其他(0, 0, "anything else")。因此,这将首先对适当的字符串进行排序,然后对空字符串进行排序,最后对进行排序None。
例:
>>> 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)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2128 次 |
| 最近记录: |