Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
Python dict.get(k)返回none,即使键存在_Python_Python 3.x_Dictionary - Fatal编程技术网

Python dict.get(k)返回none,即使键存在

Python dict.get(k)返回none,即使键存在,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,也许我对python字典的理解不太好。但问题是 有没有发生过这样的情况,一对{yelk:shell}存在在字典中说鸡蛋,但是鸡蛋.get(yelk)可以返回无 因此,在一个大型代码中,我对一个字典执行多个get操作,在某些迭代之后,我观察到这种情况 >>> for key, value in nodehashes.items(): ... print(key, nodehashes.get(key), value) ...................

也许我对python字典的理解不太好。但问题是

有没有发生过这样的情况,一对
{yelk:shell}
存在在字典中说
鸡蛋
,但是
鸡蛋.get(yelk)
可以返回

因此,在一个大型代码中,我对一个字典执行多个
get
操作,在某些迭代之后,我观察到这种情况

   >>> for key, value in nodehashes.items():
   ...    print(key, nodehashes.get(key), value)
   ............................
   ...........................
   <Graph.Node object at 0x00000264128C4DA0> 3309678211443697093 3309678211443697093
   <Graph.Node object at 0x00000264128C4DD8> 3554035049990170053 3554035049990170053
   <Graph.Node object at 0x00000264128C4E10> None -7182124040890112571  # Look at this!!
   <Graph.Node object at 0x00000264128C4E48> 3268020121048950213 3268020121048950213
   <Graph.Node object at 0x00000264128C4E80> -1243862058694105659 -1243862058694105659
   ............................
   ............................



如果在可变对象上有一个自定义的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,则可以复制该方法:

class A:
    def __hash__(self):
        return hash(self.a)

>>> a1 = A()
>>> a2 = A()
>>> a1.a = 1
>>> a2.a = 2
>>> d = {a1: 1, a2: 2}
>>> a1.a = 3
>>> d.items()
dict_items([(<__main__.A object at 0x7f1762a8b668>, 1), (<__main__.A object at 0x7f17623d76d8>, 2)])
>>> d.get(a1)
None
A类:
定义散列(自我):
返回散列(self.a)
>>>a1=A()
>>>a2=A()
>>>a1.a=1
>>>a2.a=2
>>>d={a1:1,a2:2}
>>>a1.a=3
>>>d.项目()
口述项目([(1),(2)])
>>>d.get(a1)
没有一个

您可以看到
d.items()
仍然可以访问这两个
A
对象,但是
get
无法再找到它,因为
hash
值已更改。

这是并发代码吗?有可能还有另一个线程/。。。这可以在迭代时修改
节点hash
?不,它不是并发的。
类节点
是否定义了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,classs节点同时定义为'def uuu eq uu(self,other):if(self.x==other.x)和(self.y==other.y):return True-else:return False-def uu hash uu(self):return hash(tuple([self.x,self.y])以及任何与等式不一致的hash方法。在散列数据结构中考虑<代码>浮点('n')的行为。但是我怀疑你的猜测是正确的。@juanpa不一致是一个问题,但在你的情况下,代码将是完全确定的,它显然不在这里。嗯,这实际上解释了这一点,所以我必须考虑另一种方法来识别节点,而不是散列方法。@JaswantP你可以使用
id(node)
作为dict中的键。@JaswantP好的,是的,id将是相同的。不过,我忘了,如果定义的是
\uuuuuueq\uuuuuu
而不是
\uuuuuuuuu散列
,那么
\uuuuuuuu散列
会隐式设置为
,这将在尝试对其进行散列时引发类型错误。因此,您可以使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
class A:
    def __hash__(self):
        return hash(self.a)

>>> a1 = A()
>>> a2 = A()
>>> a1.a = 1
>>> a2.a = 2
>>> d = {a1: 1, a2: 2}
>>> a1.a = 3
>>> d.items()
dict_items([(<__main__.A object at 0x7f1762a8b668>, 1), (<__main__.A object at 0x7f17623d76d8>, 2)])
>>> d.get(a1)
None