-1
class FrozenDict(dict):
    def __init__(self,default=None):
        if default: self.update(default)
    def __hash__(self):
        return id(self)


dictionary={FrozenDict({"dsa":"saas"}):"Hi"}

eval(str(dictionary))


TypeError: unhashable type: 'dict'

文字列を「生の」形式に変換しようとしているので、エラーは発生しません。辞書の「生の」形式は次のようになります{FrozenDict({"dsa":"saas"}):"Hi"}

このようなもの:

eval(rawform(dictionary))

素晴らしいだろう..

編集:

OrderedDict は機能しているようですが、その理由を知っている人はいますか?

編集:

これは、pickle.loads を使用してロードしようとしているものです

S'{\'Source\': {\'CollideObjects\': [], \'Depth\': 0, \'Events\': OrderedDict([(({\'function\': \'bi_create\', \'class\': \'\', \'name\': \'Create\'}, 0), {{\'data\': {\'raw\': \'Set saddasdsadsa to: (,)\', \'data\': {u\'function\': u\'asddsaadsasddsasdasdasddsasdasda(x=None,y=None)\', u\'src\': u\'GUI\\\\movetoxy.xml\', \'code\': u\'\\nreal=[0,0]\\ncurrent=self.sdsdadsaadssd()\\nif x!=None:\\n\\treal[0]=float(x)\\nelse:\\n\\treal[0]=current[1]\\nif y!=None:\\n\\treal[1]=float(y)\\nelse:\\n\\treal[1]=current[1]\\nself.SetPos(*real)\\n\', \'return\': u"\'Set Position to: (\'+str(x)+\',\'+str(y)+\')\'", u\'title\': u\'Set Position\', u\'image\': u\'modules\\\\Core\\\\images\\\\pos.png\', \'dddddddddd\': u\'self.SetPosition(,)\', \'html\': u\'C:\\\\sadsdadsad\\\\dsasasddsa\\\\modules\\\\Core\\\\GUI\\\\movetoxy.xml\', \'apply\': {\'name\': \'Self\', \'value\': \'\'}, u\'holder\': u\'False\', u\'class\': u\'object\'}, \'dialog\': u\'Set Position\', \'name_var\': {u\'y\': {\'class\': u\'wxTextCtrl\', \'value\': u\'\'}, u\'x\': {\'class\': u\'wxTextCtrl\', \'value\': u\'\'}}}}: {}})]), \'Sprite\': \'\'}, \'Window\': \'\', \'Type\': \'Object\', \'Name\': u\'Object1\', \'Id\': 1}'
4

3 に答える 3

1

「rawform」を作成するには、オーバーライドする必要があります__repr__:

class FrozenDict(dict):
    def __init__(self,default=None):
        if default: self.update(default)
    def __hash__(self):
        return id(self)
    def __repr__(self):
        return "FrozenDict(%s)" % dict.__repr__(self)


print FrozenDict({"dsa":"saas"})

dictionary={FrozenDict({"dsa":"saas"}):"Hi"}

print eval(str(dictionary))

私が得る結果:

FrozenDict({'dsa': 'saas'})
{FrozenDict({'dsa': 'saas'}): 'Hi'}
于 2013-05-10T17:40:15.587 に答える