我的情况如下:我有一个数据表(少数字段,少于一百行),该数据表在程序中广泛使用。我还需要这些数据具有持久性,因此我将其另存为CSV并在启动时加载。我选择不使用数据库,因为每个选项(甚至是SQLite)对于我的卑微要求都是过高的(另外-我希望能够以一种简单的方式离线编辑值,没有什么比记事本更简单的了)。
假设我的数据如下所示(在文件中用逗号分隔,没有标题,这只是一个例证):
Row | Name | Year | Priority
------------------------------------
1 | Cat | 1998 | 1
2 | Fish | 1998 | 2
3 | Dog | 1999 | 1
4 | Aardvark | 2000 | 1
5 | Wallaby | 2000 | 1
6 | Zebra | 2001 | 3
笔记:
- 行可以是写入文件的“实际”值,也可以是代表行号的自动生成的值。无论哪种方式,它都存在于内存中。
- 名称是唯一的。
我对数据所做的事情:
- 根据ID(迭代)或名称(直接访问)查找一行。
- 根据多个字段,以不同的顺序显示表格:我需要对表格进行排序,例如,按优先级然后按年份排序,或者按年份然后按优先级排序,等等
- 我需要根据参数集对实例进行计数,例如,1997年至2002年之间的年份有多少行,或者1998年有多少行并且优先级> 2,等等。
我知道SQL的这种“呼声” ...
我试图找出什么是数据结构的最佳选择。以下是我看到的几种选择:
行列表列表:
a = []
a.append( [1, "Cat", 1998, 1] )
a.append( [2, "Fish", 1998, 2] )
a.append( [3, "Dog", 1999, 1] )
...
列列表的列表(显然会有add_row等的API):
a = []
a.append( [1, 2, 3, 4, 5, 6] )
a.append( ["Cat", "Fish", "Dog", "Aardvark", "Wallaby", "Zebra"] )
a.append( [1998, 1998, 1999, 2000, 2000, 2001] )
a.append( [1, 2, 1, 1, 1, 3] )
列列表字典(可以创建常量来替换字符串键):
a = {}
a['ID'] = [1, 2, 3, 4, 5, 6]
a['Name'] = ["Cat", "Fish", "Dog", "Aardvark", "Wallaby", "Zebra"]
a['Year'] = [1998, 1998, 1999, 2000, 2000, 2001]
a['Priority'] = [1, 2, 1, 1, 1, 3]
键为(Row,Field)元组的字典:
Create constants to avoid string searching
NAME=1
YEAR=2
PRIORITY=3
a={}
a[(1, NAME)] = "Cat"
a[(1, YEAR)] = 1998
a[(1, PRIORITY)] = 1
a[(2, NAME)] = "Fish"
a[(2, YEAR)] = 1998
a[(2, PRIORITY)] = 2
...
而且我敢肯定还有其他方法...但是,在满足我的要求(复杂的订购和计数)时,每种方法都有缺点。
推荐的方法是什么?
编辑:
需要澄清的是,性能对我而言不是主要问题。由于表太小,我相信几乎每个操作都将在毫秒范围内,这对我的应用程序来说不是问题。