Answers:
json模块是一个很好的解决方案。与pickle相比,它的优势在于它仅生成纯文本输出,并且是跨平台和跨版本的。
import json
json.dumps(dict)
import json
像我一样!
如果您的字典不太大,也许str + eval可以完成工作:
dict1 = {'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }}
str1 = str(dict1)
dict2 = eval(str1)
print dict1==dict2
如果源不受信任,则可以使用ast.literal_eval而不是eval来提高安全性。
使用该pickle
模块将其保存到磁盘并稍后加载。
为什么不使用Python 3的内置ast库的函数literal_eval。最好使用literal_eval而不是eval
import ast
str_of_dict = "{'key1': 'key1value', 'key2': 'key2value'}"
ast.literal_eval(str_of_dict)
将输出作为实际字典
{'key1': 'key1value', 'key2': 'key2value'}
而且,如果您要求将Dictionary转换为String,那么如何使用str() Python的方法。
假设字典是:
my_dict = {'key1': 'key1value', 'key2': 'key2value'}
这将像这样完成:
str(my_dict)
将打印:
"{'key1': 'key1value', 'key2': 'key2value'}"
这是您想要的简单操作。
我认为您应该考虑使用shelve
提供持久性文件支持的字典式对象的模块。它很容易代替“真实”字典使用,因为它几乎透明地为您的程序提供了可以像字典一样使用的东西,而无需将其显式转换为字符串然后写入文件(或反之,反之亦然。
主要区别是需要open()
先使用close()
它,然后再使用(完成时可能要使用sync()
它,具体取决于writeback
要使用所使用选项)。创建的任何“架子”文件对象都可以包含常规字典作为值,从而使它们可以逻辑嵌套。
这是一个简单的例子:
import shelve
shelf = shelve.open('mydata') # open for reading and writing, creating if nec
shelf.update({'one':1, 'two':2, 'three': {'three.1': 3.1, 'three.2': 3.2 }})
shelf.close()
shelf = shelve.open('mydata')
print shelf
shelf.close()
输出:
{'three': {'three.1': 3.1, 'three.2': 3.2}, 'two': 2, 'one': 1}
如果您关心速度,请使用与json相同的API的ujson(UltraJSON):
import ujson
ujson.dumps([{"key": "value"}, 81, True])
# '[{"key":"value"},81,true]'
ujson.loads("""[{"key": "value"}, 81, true]""")
# [{u'key': u'value'}, 81, True]
如果需要可读性(不是IMHO的JSON或XML),或者如果不需要阅读的话,我就使用yaml。
写
from pickle import dumps, loads
x = dict(a=1, b=2)
y = dict(c = x, z=3)
res = dumps(y)
open('/var/tmp/dump.txt', 'w').write(res)
回过头再读
from pickle import dumps, loads
rev = loads(open('/var/tmp/dump.txt').read())
print rev
b
在此处打开文件时,您确实应该使用标志。
dumps()
默认值为协议0,这是一个ascii协议。这就是为什么'rb'
不需要恕我直言。