草庐IT

python - 根据其属性为python对象生成唯一ID

有没有一种方法可以在python中仅基于对象的属性值为对象生成类似哈希的ID?例如,classtest:def__init__(self,name):self.name=nameobj1=test('a')obj2=test('a')hash1=magicHash(obj1)hash2=magicHash(obj2)我要找的是hash1==hash2的东西。python中是否存在这样的东西?我知道我可以测试obj1.name==obj2.name,但我正在寻找可以用于任何对象的通用内容。 最佳答案 你的意思是这样的?使用特殊方法__

python - 如何使 python 数据类可哈希?

假设我在python3中有一个数据类。我希望能够对这些对象进行哈希处理和排序。我只希望它们按id排序/散列。我在文档中看到我可以实现_哈希_和所有这些,但我想让数据计算为我完成工作,因为它们旨在处理这个问题。fromdataclassesimportdataclass,field@dataclass(eq=True,order=True)classCategory:id:str=field(compare=True)name:str=field(default="setthisinpost_init",compare=False)a=sorted(list(set([Category(

python - 没有 SHA-1 的 werkzeug.security generate_password_hash 替代方案

我使用werkzeug.security中的generate_password_hash对我的密码进行散列和加盐。我最近看到thisarticleaboutSHA-1collisions.werkzeug.security使用SHA-1,因为它不再那么安全,我想要一个替代方案。如何在不依赖SHA-1的情况下散列密码?fromwerkzeug.securityimportgenerate_password_hashgenerate_password_hash(secret) 最佳答案 在generate_password_hash中使

python - 简明的 Ruby 哈希等同于 Python dict.get()

知道我可以像这样操作Ruby默认Hash值:h={a:1,b:2,c:3}h[:x]#=>nilh.default=5h[:x]#=>5h.default=8h[:y]#=>8但是当对具有不同默认值的多个值重复执行此操作时,这会变得非常乏味。如果将散列传递给其他方法,这些方法需要为某些(可能丢失的)键设置自己的默认值,它也可能会变得危险。在Python中,我曾经d={'a':1,'b':2,'c':3}d.get('x',5)#=>5d.get('y',8)#=>8没有任何副作用。Ruby中是否有与此get方法等效的方法? 最佳答案

python - 序列化 MD5 计算状态并稍后恢复?

我想序列化/反序列化md5上下文。但我不知道如何在Python中做到这一点。我想做的伪代码。importmd5#Starthashgenerationm=md5.new()m.update("Content")#Serializemserialized_m=serialize(m)#Inanotherfunction/machine,deserializem#andcontinuehashgenerationm2=deserialize(serialized_m)m2.update("Morecontent")m2.digest()有用于此的C++库。有用于Python的吗?为什么md

python - 在 python pandas 的数据框中使用选定的列为每一行数据创建哈希值

我问过similarquestion在R中关于为每一行数据创建哈希值。我知道我可以使用类似hashlib.md5(b'HelloWorld').hexdigest()的东西来对字符串进行哈希处理,但是数据帧中的一行呢?更新01我的代码起草如下:forindex,rowincourse_staff_df.iterrows():temp_df.loc[index,'hash']=hashlib.md5(str(row[['cola','colb']].values)).hexdigest()对我来说似乎不是很pythonic,有更好的解决方案吗? 最佳答案

python - 散列一系列值

我知道我可以将奇异值散列为dict中的键.例如,我可以散列5作为dict中的键之一.我目前面临一个问题,需要我对一系列值进行哈希处理。基本上,我需要一种更快的方法来做到这一点:if0哪里x是一些float任意精度参数。我能想到的最快的方法是散列,但问题是:我可以使用(0.1,0.2)作为一个关键,但这仍然会让我花费O(n)运行时间并且最终并不比elif的系列更好。s(我将不得不遍历键并检查是否为key[0])。有没有办法对一系列值进行哈希处理,以便我可以检查哈希表中的0.15仍然得到#executeB?如果这样的散列不可能实现,我还能如何改进它的运行时间?我正在处理足够大的数据集,线性

python - 在 python 中为 url 参数生成固定长度的哈希

我在appengine上使用python工作。我正在尝试创建与youtubeurl(http://www.youtube.com/watch?v=XhMN0wlITLk)中的“v”值等效的内容,用于检索特定实体。数据存储自动生成一个key,但它太长了(34位)。我已经尝试使用hashlib来构建我自己的,但我又得到了一个长字符串。我想将它保持在11位以下(我没有处理大量实体)并且字母和数字是可以接受的。似乎应该有一个非常标准的解决方案。我可能只是想念它。 最佳答案 您可以使用自动生成的integerid生成哈希的key。生成哈希的一

python - PyCharm 能否自动生成 __eq__() 和 __hash__() 实现?

我是PyCharm的新手,但却是IntelliJ的长期用户。在IntelliJ中,当您编写类定义时,IDE可以根据实例变量自动生成构造函数、equals()方法和hashCode()方法。这不仅有利于节省键入时间,而且有助于防止无意中的错误以及自动引入一些equals()和hashCode()最佳实践。鉴于产品来自同一家公司,我希望PyCharm也能做到这一点。在对文档进行大量谷歌搜索和搜索之后,我找不到任何关于__eq__()或__hash__()的内容。诚然,Python实例变量没有明确指定,但我希望生成器可以遵循一个约定,比如提供所有__init()__参数作为潜在的实例变量。至

python - 有什么理由*不*缓存对象的哈希值吗?

我编写了一个类,其.__hash__()实现需要很长时间才能执行。我一直在考虑缓存它的哈希值,并将它存储在像._hash这样的变量中,这样.__hash__()方法就会简单地返回._hash。(将在.__init__()末尾或第一次调用.__hash__()时计算。)我的理由是:“这个对象是不可变的->它的哈希永远不会改变->我可以缓存哈希。”但现在我开始思考:您可以对任何可散列对象说同样的话。(哈希值是其id的对象除外。)那么有没有理由不缓存一个对象的散列,除了散列计算非常快的小对象? 最佳答案 当然,把哈希值缓存起来就可以了。事