不区分大小写的树视图排序
case-insensitive treeview sorting
我正在使用下面的代码对 treeview 列进行排序,但它区分大小写,即如果列值为 [a,c,A]
,则排序后的值将为 [a,c,A]
,但我希望它为 [a,A,c]
甚至数字排序仅基于第一个数字,即如果 [2,1,11]
是列值,则输出将是 [1,11,2]
我希望它成为 [1,2,11]
。请帮我解决这个问题。谢谢
for col in cols:
self.treeview.heading(col, text=col,command=lambda c=col: self.sortby(self.treeview, c, 0))
def sortby(self,tree, col, descending):
data = [(tree.set(child, col), child) \
for child in tree.get_children('')]
data.sort(reverse=descending)
for ix, item in enumerate(data):
tree.move(item[1], '', ix)
tree.heading(col, command=lambda col=col: self.sortby(tree, col, \
int(not descending)))
不区分大小写的排序是通过提供一个键映射函数来排序的。例如,sort(values, key=str.casefold)
(Python 3).
在对元组的第一个值进行排序的情况下,数据排序行将变为 data.sort(reverse=descending, key=lambda t: str.casefold(t[0]))
我正在使用下面的代码对 treeview 列进行排序,但它区分大小写,即如果列值为 [a,c,A]
,则排序后的值将为 [a,c,A]
,但我希望它为 [a,A,c]
甚至数字排序仅基于第一个数字,即如果 [2,1,11]
是列值,则输出将是 [1,11,2]
我希望它成为 [1,2,11]
。请帮我解决这个问题。谢谢
for col in cols:
self.treeview.heading(col, text=col,command=lambda c=col: self.sortby(self.treeview, c, 0))
def sortby(self,tree, col, descending):
data = [(tree.set(child, col), child) \
for child in tree.get_children('')]
data.sort(reverse=descending)
for ix, item in enumerate(data):
tree.move(item[1], '', ix)
tree.heading(col, command=lambda col=col: self.sortby(tree, col, \
int(not descending)))
不区分大小写的排序是通过提供一个键映射函数来排序的。例如,sort(values, key=str.casefold)
(Python 3).
在对元组的第一个值进行排序的情况下,数据排序行将变为 data.sort(reverse=descending, key=lambda t: str.casefold(t[0]))