gpt4 book ai didi

python - 如何为相等的字典生成唯一的相等散列?

转载 作者:太空狗 更新时间:2023-10-29 20:50:07 28 4
gpt4 key购买 nike

例如:

>>> a = {'req_params': {'app': '12345', 'format': 'json'}, 'url_params': {'namespace': 'foo', 'id': 'baar'}, 'url_id': 'rest'}
>>> b = {'req_params': { 'format': 'json','app': '12345' }, 'url_params': { 'id': 'baar' ,'namespace':'foo' }, 'url_id': 'REST'.lower() }
>>> a == b
True

什么是为两个字典生成相等哈希值的好哈希函数?词典会有基本的数据类型,如 int、list、dict 和 strings,没有其他对象。

如果哈希是空间优化的,那就太好了,目标集大约有 500 万个对象,因此碰撞机会相当小。

我不确定 json.dumps 或其他序列化是否尊重平等而不是字典中成员的结构。例如。使用 str of dict 的基本散列不起作用:

>>> a = {'name':'Jon','class':'nine'}
>>> b = {'class':'NINE'.lower(),'name':'Jon'}
>>> str(a)
"{'name': 'Jon', 'class': 'nine'}"
>>> str(b)
"{'class': 'nine', 'name': 'Jon'}"

json.dumps 也不起作用:

>>> import json,hashlib
>>> a = {'name':'Jon','class':'nine'}
>>> b = {'class':'NINE'.lower(),'name':'Jon'}
>>> a == b
True
>>> ha = hashlib.sha256(json.dumps(a)).hexdigest()
>>> hb = hashlib.sha256(json.dumps(b)).hexdigest()
>>> ha
'545af862cc4d2dd1926fe0aa1e34ad5c3e8a319461941b33a47a4de9dbd7b5e3'
>>> hb
'4c7d8dbbe1f180c7367426d631410a175d47fff329d2494d80a650dde7bed5cb'

最佳答案

pprint 模块对字典键进行排序

from pprint import pformat
hash(pformat(a)) == hash(pformat(b))

如果你想保留哈希值,你应该使用来自 hashlib 的哈希值。 sha1 足够了

关于python - 如何为相等的字典生成唯一的相等散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16735786/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com