Python中具有多个属性值的树的快速查找

0 投票
1 回答
2053 浏览
提问于 2025-04-17 18:14

我需要在Python中创建一个树形对象,这个树要非常快。查找的速度比占用内存更重要。树的叶子节点就是我想要的值。

比如,给定状态=NY,位置=3,小时=2,星期几=3,我需要快速得到值=100。带有*的节点是叶子节点。

0) root
    1) {state: [NY,LA]}
        2) {howOfDay:[1,2,3,4,5], postion:[1,2,3]}
                             *3) {dayOfWeek:[234]} => value:100
            4) {state: [FL,NV,……rest of the states]}
                5) {howOfDay:[1,6,7,8,9….23]}
                      *6) {dayOfWeek:[1,5,6,7]} => value:120

在我的数据库中,数据看起来像这样,属性是以json对象的形式存在的。

parent child attribute value

0 1 state NY,LA
1 2 {howOfDay:[1,2,3,4,5], postion:[1,2,3]}
2 3 dayOfWeek dayOfWeek [2,3,4] 100
0 3 state  [FL,NV,……rest of the states]
4 5 howOfDay:[1,6,7,8,9….23]
5 6 dayOfWeek:[1,5,6,7] 120

那么,我应该使用哪个Python库和树形结构来最好地找到一个值呢?我该如何转换数据,以便能够快速查找?

1 个回答

5

如果你更看重速度而不是内存使用,可以把所有数据放到一个字典里,使用一个 tuple(state, position, hourOfDay, dayOfWeed) 作为键。

data = dict()

现在,对于每个叶子节点,把数据插入到字典中:

data[state, position, hourOfDay, dayOfWeed] = value

然后你可以通过以下方式访问数据:

value = data[state, position, hourOfDay, dayOfWeed]

这样做比任何树的遍历都要快,因为它利用了CPython优化过的哈希字典实现。

撰写回答