在Python中创建表格

2024-04-29 15:14:15 发布

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

我想用python构建一个包含三列的表,然后根据需要获取值。 我认为字典是最好的方法,它有两个值的键映射。在

|column1 |  column 2     | column 3   | 

|  MAC   |  PORT NUMBER  |    DPID    |

|  Key   |  Value 1      | Value 2    |

建议方式:

//定义全局学习表 globe_learning_table = defaultdict(set)

//将交换机的端口号和dpid按MAC地址添加为key // 包.src在这种情况下会给你MAC地址 globe_learning_table[packet.src].add(event.port)globe_learning_table[packet.src].add(dpid_to_str(connection.dpid))

//根据DPID的MAC地址获取DPID的值 globe_learning_table[packket.src][????]

我不确定如果一个键指向两个值,我如何获得与该键相关联的特定值。在

我也愿意使用任何其他的数据结构,如果它可以建立这个动态表,并在必要时给我特定的值。在


Tags: 方法srcadd字典packetvaluemac地址
3条回答

为什么是字典?为什么不提供一个命名元组的列表,或者一个来自您定义的类的对象的集合(列表、字典)(每个列都有属性)?在

怎么了:

class myRowObj(object):
    def __init__(self, mac, port, dpid):
        self.mac  = mac
        self.port = port
        self.dpid  = dpid


myTable = list()
for each in some_inputs:
    myTable.append(myRowObj(*each.split())

。。。或者类似的事情?在

(注:myTable可以是列表、字典或任何适合您需要的东西。显然,如果它是一个字典,那么你必须问你将使用什么样的键来访问这些“行”)。在

这种方法的优点是,“行对象”(您可以用某种对应用程序域更合理的方式命名)可以实现您选择的任何语义。这些对象可以验证和转换实例化时提供的任何值,计算任何派生值,您还可以定义对象的字符串和代码表示(例如,当您的一行用作字符串或在某些类型的开发和调试或序列化中使用时的隐式转换(_str__repr_特殊方法)。在

命名元组(在Python2.6中添加)是一种轻量级对象类,与普通自定义类相比,它可以提供一些性能优势和更轻的内存占用(例如,对于只希望命名字段而不将自定义方法绑定到这些对象的情况)。在

如果你想在字典2中创建一个足够小的值的映射,那么它就足够了。在

然而,正如E先生指出的,使用数据库来存储信息并在必要时从那里检索信息可能是更好的设计。这可能不会导致显著的性能损失。在

也许是这样吧?在

>>> global_learning_table = collections.defaultdict(PortDpidPair)
>>> PortDpidPair = collections.namedtuple("PortDpidPair", ["port", "dpid"])
>>> global_learning_table = collections.defaultdict(collections.namedtuple('PortDpidPair', ['port', 'dpid']))
>>> global_learning_table["ff:" * 7 + "ff"] = PortDpidPair(80, 1234)
>>> global_learning_table
defaultdict(<class '__main__.PortDpidPair'>, {'ff:ff:ff:ff:ff:ff:ff:ff': PortDpidPair(port=80, dpid=1234)})
>>>

命名元组可能适合每一行,但是根据这个表的大小,使用sqlite数据库或类似的工具可能会更好。在

相关问题 更多 >