Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3字典键唯一方法或回调_Python_Python 3.x - Fatal编程技术网

Python3字典键唯一方法或回调

Python3字典键唯一方法或回调,python,python-3.x,Python,Python 3.x,我将构造的对象作为键放置在字典中,然后分配值(在列表中) 来自C++,我习惯于指定哈希< /C> >如何计算以确保唯一性。 在这种情况下,我可以看到字典使用了地址,希望这不会与我的意图冲突。 然而,我似乎找不到一个简单问题的答案: 如何为Python3字典中的条目指定键函子或回调 例如,假设我想将同一类的对象存储为键,除了内存地址之外,如果我要使用type(class\u name),这将是一个问题,因为不同的对象将具有相同的类型 例如: calls={} #一些循环 对于z中的x: obj=类

我将构造的对象作为
放置在字典中,然后分配值(在
列表中

<>来自C++,我习惯于指定<代码>哈希< /C> >如何计算以确保唯一性。 在这种情况下,我可以看到字典使用了地址,希望这不会与我的意图冲突。 然而,我似乎找不到一个简单问题的答案:

如何为Python3字典中的条目指定键函子或回调

例如,假设我想将同一类的对象存储为键,除了内存地址之外,如果我要使用
type(class\u name)
,这将是一个问题,因为不同的对象将具有相同的类型

例如:

calls={}
#一些循环
对于z中的x:
obj=类名称()
呼叫[obj]=[1,2,3,4]
这不是一个问题,但以下是:

calls={}
对于z中的x:
obj=类名称()
呼叫[类型(obj)]=[1,2,3,4]
明确地说,我想我可以使用一个函数:

def计算:
#在这里计算密钥
调用={}
对于z中的x:
obj=类名称()
调用[calc(obj)]=[1,2,3,4]
在C++中,我在“代码”中定义了STD::无序的映射;代码> 其中,
hash_func
将指定如何在给定键的情况下计算映射的实际键。 Python中是否有类似的机制,或者说没有意义?
也许通过子类化
dict

我将根据jasonharper的建议回答我自己的问题。 我不知道这是不是最能做事情的(它感觉更类似于C++方法),但最终结果是我需要的: -字典,谁的密钥创建由我定义:

class pdf\u to\u文本:
#
定义调用(self,文件名):
断言文件名不是None,“None filename arg”
doc=无
尝试:
doc=文档(文件名)
例外情况除外,如e:
打印('code:{c},msg,{m}'
.格式(c=类型(e)。\uuuuu名称,m=str(e)))
#
字=0
行=[]
对于文档中的页面:
对于第页中的行。行:
行。追加(行)
words+=len(line.split())
返回(字、行)
#
定义散列(自我):
返回散列(类型(self)。\u\u名称\u\u)
#
定义(自身、其他):
返回(类型(自身)。\uuuuu名称\uuuuuu==类型(其他)。\uuuuuu名称\uuuuuu)
pdf至ocr类别:
#
定义初始化(self,args):
self.args=args
obj=ocr(args)
assert obj不是None,“OCR对象是None”
self.ocr=obj
#
定义调用(self,文件名):
返回self.ocr.run(文件名)
#
定义散列(自我):
返回散列(类型(self)。\u_名称\u_+json.dumps(self.args))
#
定义(自身、其他):
返回(self.\uuuu hash\uuuuuuuuu()==其他.\uuuuuu hash\uuuuuuuuuu())

现在这意味着,当使用这些实例化对象中的任何一个作为键时,使它们唯一的不是它们的内存、名称或其他键,而是被重写的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法。

python的dict实现足够聪明。python的美妙之处在于,您通常不需要担心这些问题things@Chris_Rands我可以相信,当我知道我将经过可能发生碰撞的物体时,我只是对幕后发生的事情感到有点不安。现在还不清楚你在问什么。第二个代码段的问题不是“哈希冲突”,而是每次都使用相同的密钥,例如类。可能我误解了,如果只想多次插入同一个键而不覆盖数据,请签出集合。defaultdict如果可以将类的两个不同实例视为相等,则需要在类上定义
\uuuuuuu eq\uuuuu()
\uuuu hash\uuuuu()
。如果所有实例都不相等,那么这些方法的默认实现就可以了。