在python中散列层次结构(类似于文件结构)的好方法是什么?
我可以将整个层次结构转换为虚线字符串,然后对其进行哈希处理,但是有没有更好(或更有效)的方法来执行此操作而不会一直来回?
我可能想要散列的结构示例是:
a -> b1 -> c -> 1 -> d
a -> b2 -> c -> 2 -> d
a -> c -> 1 -> d
答案 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__()
方法,例如:以递归方式计算哈希值等。