首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python哈希函数

问Python哈希函数
EN

Stack Overflow用户
提问于 2009-03-17 13:00:41
回答 3查看 4K关注 0票数 0

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

我可以将整个层次结构转换为带点的字符串,然后对其进行散列,但有没有更好(或更有效)的方法来实现这一点,而不是一直来回奔波?

我可能想要散列的结构的一个例子是:

代码语言:javascript
复制
a -> b1 -> c -> 1 -> d
a -> b2 -> c -> 2 -> d
a -> c -> 1 -> d
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-17 13:12:33

如果您可以将层次结构组件作为元组访问,则只需对其进行哈希处理--元组是可散列的。在与分隔字符串的相互转换中,您可能不会获得太多好处,但这是一个开始。

如果这不起作用,也许您可以提供有关如何存储层次结构/路径信息的更多信息。

票数 8
EN

Stack Overflow用户

发布于 2009-03-17 16:48:33

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

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

代码语言:javascript
复制
>>> d["a","b1","c",1,"d"] = value

然而,如果你要做的事情像“快速找到下面的所有项目”一个-> b1,将它存储为一个嵌套的哈希表可能更有意义(否则你必须遍历所有项目才能找到你感兴趣的项目)。

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

代码语言:javascript
复制
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"]
票数 4
EN

Stack Overflow用户

发布于 2009-03-17 14:51:35

您可以通过实现__hash__() method来使任何对象成为可哈希对象

因此,您可以简单地向存储层次结构的对象添加合适的__hash__()方法,例如,递归地计算散列,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/654128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档