data = [(some, headers, go, here),
(data, from, first, row),
(data, from, second, row),
... ,
(data, from, last, row)]
然后构建一个自定义键对其进行排序,例如:
^{pr2}$
但这有点难看。创建一个处理所有这些问题的自定义类可能更易于维护。在
import operator
class Table(list): # inherits from list since it's just a list of lists
def __init__(self, headers, rows_of_data):
self.maxcellwidth = 0
self.headers = headers
for cell in self.headers:
self.maxcellwidth = max(len(str(cell)), self.maxcellwidth)
for row in rows_of_data:
self.append(row)
for cell in row:
self.maxcellwidth = max(len(str(cell)), self.maxcellwidth)
def sort_by_column(self, sort_by):
"""Sort by column and return a new Table"""
return Table(self.headers, sorted(self, key=operator.itemgetter(sort_by)))
def sort_by_columnip(self, sort_by):
"""Sort by column in-place"""
self.sort(key=operator.itemgetter(sort_by))
def __str__(self):
return_value = list()
header = "|".join(["{0:{1}}".format(header,self.maxcellwidth) for header in self.headers])
return_value.append(header)
return_value.append("-" * len(header))
for row in self:
return_value.append("|".join(["{0:{1}}".format(cell,self.maxcellwidth) for cell in row]))
return "\n".join(return_value)
# TEST
>>> headers = ("one","two","three","four")
>>> data = [('1','2','3','5'), ('5','6','7','4')]
>>> table = Table(headers, data)
>>> print(table)
one |two |three|four
-
1 |2 |3 |5
5 |6 |7 |4
>>> table.sort_by_columnip(3)
>>> print(table)
one |two |three|four
-
5 |6 |7 |4
1 |2 |3 |5
我知道没有什么好电池可以做到这一点。你可以试着用内置容器来做,比如:
然后构建一个自定义键对其进行排序,例如:
^{pr2}$但这有点难看。创建一个处理所有这些问题的自定义类可能更易于维护。在
相关问题 更多 >
编程相关推荐