Python 把字典放在合适的地方';s值属于某个自定义类

Python 把字典放在合适的地方';s值属于某个自定义类,python,pickle,Python,Pickle,是时候在这里提出我的第一个问题了。 我面临以下问题: 我正在使用pickle模块转储一个大字典,然后从磁盘中加载回来。 问题是,取消勾选后,两个对象不相同。 实际上这就是我正在做的: 在文件A.py中,我定义了具有一些属性和方法的类 在文件B.py中,我制作了一个字典,其中的值是a.py 同样,在文件B.py中,我对这本词典进行了pickle处理,然后再次将其取消pickle 这两条格言不一样。我检查了钥匙,钥匙是一样的。问题在于价值观 有什么想法吗?具有相同键和值的两个不同词典不会被视为完全相

是时候在这里提出我的第一个问题了。 我面临以下问题:

我正在使用pickle模块转储一个大字典,然后从磁盘中加载回来。 问题是,取消勾选后,两个对象不相同。 实际上这就是我正在做的:

在文件
A.py
中,我定义了具有一些属性和方法的类

在文件
B.py
中,我制作了一个字典,其中的值是
a.py

同样,在文件
B.py
中,我对这本词典进行了pickle处理,然后再次将其取消pickle

这两条格言不一样。我检查了钥匙,钥匙是一样的。问题在于价值观


有什么想法吗?

具有相同键和值的两个不同词典不会被视为完全相同:

d1={'k1':12345} >>>d2={'k1':12345} >>>首被告是次被告 假的 >>>d1['k1']是d2['k1'] 假的 即使您实际将值从一个复制到另一个:

>>d1['k1']=d2['k1']
>>>d1['k1']是d2['k1']
真的
>>>首被告是次被告
假的
这是因为每一个都是一个单独的容器。另一方面,您可以使用以下表达式检查所有键和值是否具有相等的值,而不是完全相同的对象:

(set(d1)=set(d2))和all(d1[k]==d2[k]表示d1中的k)
第一个子表达式确保每个键具有相同的值,第二个子表达式确保与每个键关联的值相等


当您从保存的数据重建字典时,将创建一个新的字典。它将不是同一个字典,但它的所有键和值都应该与原始字典相同。如果事实并非如此,请至少向我们提供您用于确定它们是否相同的代码。

类的实例实际上是字典的值,如下所示:

class SchemaObject:
def __init__(self):
    self.type = ''
    self.name = ''
    self.parentdn = ''
    self.dn = ''
    self.oclass = ''

def initWithXMLNode(self, xmlnode, parentdn):
    self.type = ''
    self.name = ''
    self.parentdn = parentdn
    if xmlnode.nodeName=='fragments':
        self.dn = parentdn
    if xmlnode.nodeName=='fragment':
        self.initFragment(xmlnode)
    elif xmlnode.nodeName=='configGroupLdap':
        self.initGroup(xmlnode)
    elif xmlnode.nodeName=='configObjectLdap':
        self.initObject(xmlnode)

def initWithFragment(self, dn, parentdn, name):
    self.type = 'object'
    self.name = name
    self.parentdn = parentdn
    self.dn = dn
    self.oclass = name

def initFragment(self, xmlnode):
    self.type = 'fragment'
    self.dn = 'fsFragmentId=' + xmlnode.firstChild.nodeValue + ',' + self.parentdn
    self.oclass = 'FSFragment'

def initGroup(self, xmlnode):
    self.type = 'group'
    self.name = 'group-' + xmlnode.getAttribute('name')
    self.dn = xmlnode.getAttribute('dn')
    self.oclass = 'FSFragment'

def initObject(self, xmlnode):
    self.type = 'object'
    self.name = xmlnode.getAttribute('name')
    self.oclass = self.name
    if not xmlnode.hasAttribute('rdnname'):
        self.type = 'no_rdnname'
        return
    else:
        rdnname = xmlnode.getAttribute('rdnname')
    parts = rdnname.split(',')
    if xmlnode.getAttribute('multiple')!='true':
        dn = self.parentdn
        for part in reversed(parts):
            dn = 'fsFragmentId=' + part + ',' + dn
        self.dn = dn
    else:
        self.type = ''
        self.dn = 'fsFragmentId=' + parts[len(parts)-1] + ',' + self.parentdn
        dynamicStatics.append(self.oclass)
在文件B.py中,我创建了一个字典,它的值基于这个类。 这本词典是我的词典。 我还检查了钥匙是否相等。 只有当我尝试在这些字典之间比较两个值时,它才失败

所以我试着用:

 with open('my_dumped.pkl','wb') as schema:
    pickle.dump(my_dict,schema)
在尝试从磁盘还原时:

with open('my_dumped.pkl','rb') as schema:
    b = pickle.load(schema)
如果现在我发布我的_dumped==b,这不应该返回真值吗?我不关心标识,只关心相等。正如marteanu所说,所有键都在那里,每个键都有正确的值


不幸的是,上述等式返回False。

实例通常是可选取的,因此我们需要一些代码示例,或者一个显示输入和输出内容的示例。这两个dict不相同。-用什么来衡量“相同”?他们不会有相同的身份。自定义类是否有
方法?