在Python中,如何存储表并基于一列对其排序?

2024-04-20 09:54:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带列的HTML表

Id|Name|Address|Phone

我使用beautifulsoup导入并遍历行。在

表中的源数据无序,但我想按ID按排序顺序打印出所有这些信息

我应该将这些值保存在什么样的数据结构中(每列有不同的列表?)如何根据ID对剩下的3列进行排序?在


Tags: 数据name信息id数据结构列表排序顺序
1条回答
网友
1楼 · 发布于 2024-04-20 09:54:44

我知道没有什么好电池可以做到这一点。你可以试着用内置容器来做,比如:

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  

相关问题 更多 >