2015-09-08 10 views
0

我需要将我的一个字典从正常的dict更改为collections.OrderedDict。问题在于我将字典作为字符串存储在一个对象中,以后我需要提取它。打电话给我的dict对象foo。我以前这样做的方法是:在Python中解析字符串化的OrderedDictionary

storedDict = str(foo) 

然后在另一个文件:

import ast 
parsedDict = ast.literal_eval(storedDict) 

这工作都好得很,但现在,我已经改变foo是一个OrderedDict,它可以不再由ast.literal_eval函数解析。有没有一种功能或好的方法可以用来解析字符串化的OrderedDict?我在这里试图避免序列化与程序的其余部分保持一致。

+0

你可能要考虑将其通过JSON而不是再 –

+3

你试图避免序列,但你自己说你字符串化您的字典。你为什么这样做?这听起来不是一个好主意,我认为你只是通过错误地解决一些早期问题而导致自己头痛(像这个问题)。 –

+0

@ Two-BitAlchemist通过避免序列化我的意思是避免使用pickler/unpickler,我应该澄清。这是因为我正在研究其他人编写的项目,他们只是简单地将所有东西存储为字符串,然后再解析它们。 – samalamma708

回答

1

似乎最简单的方法是编写自己的序列化程序;特别是因为这是一个订购字典,所以你想保持订单,我假设。

这可能是如此简单(假设你的钥匙和价值观很简单:

buf = "" 
for k, v in myOrderedDict.iteritems(): 
    buf += k + "\t" + v + "\n" 
print(buf) 

如果数据可能更复杂,你可以根据需要逃避或引用

然后,当你。想回去:

d = ordereddict() 
while(True): 
    r = readline() 
    k, v = r.split('\t') 
    d[k] = v