您会问“在python中应该使用什么数据结构来组织这些组?”在
自顶向下编程的一个关键原则是,在决定了将对该结构执行的操作、它们的相对频率和任何其他标准(例如简单性和内存使用率)之前,您不会决定抽象数据结构的实现。您尚未说明该信息,因此我们无法推荐特定的实现。在
我可以想出很多方法来做你要做的事情:树、列表中的列表、字典中的字典等等。每种方法都有其优缺点。我确实想知道一点。在您的结构中,新子级别上的每个项目都以“01”开头,但“02.01.02:克里斯,皮特”除外,它以“02”开头。这是故意的吗?如果您保持其他明显的编号,这将打开一些更简单的实现。在
在您的评论中添加信息后,我建议您使用嵌套列表。每个数据项都有一个以零结尾的索引序列,结构中的任何其他内容都是一个包含其他数据项和列表的列表。在您的例子中,如果我们让整个结构命名为a,那么项01是a[1][0],项01.01在a[1][1][0],项02.01.02在a[2][1][2][0],依此类推。这种结构允许以后插入更多的项目,因此我们可以轻松地添加项目01.01.01,而不会干扰其他项目。不需要在结构中存储项编号:它们是从结构中数据项的位置直接推断出来的。在
这个实现还允许整个结构有一个数据项,它有一个空的项号,并存储在a[0]中。丢失的数据项可以用None标记,空白项可以是另一个空项,如''。下面是显示示例结构的代码和打印出来的代码。在def print_structure(structure, level=''):
"""Iterate through a heirarchical data structure, printing the data
items with their level numbers"""
for i, item in enumerate(structure):
if i == 0:
# Process each data item appropriately
if item is not None:
print(level + ' : ' + str(item))
else:
new_level = format(i, '02')
if level:
new_level = level + '.' + new_level
print_structure(item, new_level)
a = [None,
['Tony, John, Meredith',
['Alex, Fred, Melissa']],
['Alley, Henry, Natalie',
[None,
['?'],
['Chris, Pete']]],
['Andrew',
['Nancy, Peter, Harold']]]
print_structure(a)
在这个实现中,每个“组”都是一个字符串。我把组'?'放在你说存在一个组的地方,但没有说明它是什么;我把None放在你没有说存在数据项的地方。要修改结构的处理,只需更改注释Process each data item appropriately后的两行。上面代码的打印输出是
^{pr2}$
保存到JSON和从JSON恢复很容易。这应该可以满足您的需要,当然,也可以对结构或代码进行一些修改。在