Python哈希函数

时间:2009-03-17 13:00:41

标签: python hash

在python中散列层次结构(类似于文件结构)的好方法是什么?

我可以将整个层次结构转换为虚线字符串,然后对其进行哈希处理,但是有没有更好(或更有效)的方法来执行此操作而不会一直来回?

我可能想要散列的结构示例是:

a -> b1 -> c -> 1 -> d
a -> b2 -> c -> 2 -> d
a -> c -> 1 -> d

3 个答案:

答案 0 :(得分:8)

如果您可以将层次结构组件作为元组进行访问,则只需对其进行哈希处理 - 元组是可清除的。

,你可能不会在分隔字符串的转换中获得很多收益,但这只是一个开始。

如果这没有帮助,也许您可​​以提供有关如何存储层次结构/路径信息的更多信息。

答案 1 :(得分:4)

您希望如何访问您的层次结构?

如果您总是要检查完整路径,那么按照建议使用元组: 例如:

>>> d["a","b1","c",1,"d"] = value

但是,如果你要做的事情是“快速找到下面的所有项目”a - > b1“,将它存储为嵌套哈希表更有意义(否则你必须遍历所有项目以找到你们所在的那些)。

为此,defaultdict可能是最简单的存储方式。例如:

from collections import defaultdict

def new_dict(): return defaultdict(new_dict)
d = defaultdict(new_dict)

d["a"]["b1"]["c"][1]["d"] = "test"
d["a"]["b2"]["c"][2]["d"] = "test2"
d["a"]["c"][1]["d"] = "test3"

print d["a"]["c"][1]["d"]  # Prints test3
print d["a"].keys()        # Prints ["c", "b1", "b2"]

答案 2 :(得分:1)

您可以通过实施__hash__() method

使任何对象可以清除

因此,您只需向存储层次结构的对象添加合适的__hash__()方法,例如:以递归方式计算哈希值等。