您可以使用像 Michael 建议的字典(但是您需要访问v
with的内容v['a']
,这有点麻烦),或者您可以使用C++ 的 struct 的等效项:命名元组:
import collections
node = collections.namedtuple('node', 'a b c d')
# Tom = ...
v = node(Tom, 100, 3.14, {'x':1, 'y':2, 'z':3})
print node # node(a=…, b=100, c=3.14, d={'x':1, 'y':2, 'z':3})
print node.c # 3.14
print node[2] # 3.14 (works too, but is less meaningful and robust than something like node.last_name)
这类似于,但比定义自己的类:type(v) == node
等更简单。但是请注意,正如火山所指出的,存储在 a 中的值namedtuple
不能更改(anamedtuple
是不可变的)。
如果您确实需要修改记录中的值,最好的选择是class:
class node(object):
def __init__(self, *arg_list):
for (name, arg) in zip('a b c d'.split(), arg_list):
setattr(self, name, arg)
v = node(1, 20, 300, "Eric")
print v.d # "Eric"
v.d = "Ajay" # Works
我不推荐的最后一个选项确实是使用列表或元组,就像 ATOzTOA 提到的那样:元素必须以不那么易读的方式访问:node[3]
比node.last_name
;没有意义。此外,在使用列表或元组时,您无法轻松更改字段的顺序(而如果您访问命名元组或自定义类属性,则顺序无关紧要)。
node
通常将多个对象放在一个列表中,这是用于此目的的标准 Python 结构:
all_nodes = [node(…), node(…),…]
或者
all_nodes = []
for … in …:
all_nodes.append(node(…))
或者
all_nodes = [node(…) for … in …]
等等。最好的方法取决于如何node
创建各种对象,但在许多情况下,列表可能是最好的结构。
但是请注意,如果您需要存储类似于电子表格的内容并且需要访问其列的速度和设施,那么使用 NumPy 的记录数组或Pandas之类的包可能会更好。