当前位置:  开发笔记 > 编程语言 > 正文

如何为相同的字典生成唯一的相等哈希?

如何解决《如何为相同的字典生成唯一的相等哈希?》经验,为你挑选了1个好方法。

例如:

>>> 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

什么是良好的哈希函数来为两个dicts生成相等的哈希值?字典将具有基本数据类型,如int,list,dict和strings,没有其他对象.

如果散列是空间优化的,那将是很好的,目标集大约是500万个对象,因此碰撞机会相当少.

我不确定json.dumps或其他序列化是否支持相等而不是字典中成员的结构.例如.使用str的str的基本哈希不起作用:

>>> 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'

John La Rooy.. 11

pprint模块对dict键进行排序

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

如果要保留哈希值,则应使用hashlib中的哈希值.sha1很多



1> John La Rooy..:

pprint模块对dict键进行排序

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

如果要保留哈希值,则应使用hashlib中的哈希值.sha1很多

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有