使用pickle模块将其保存到磁盘并稍后加载。
pickle
json模块在这里是一个很好的解决方案。与pickle相比,它的优点是只生成纯文本输出,并且是跨平台和跨版本的。
import json json.dumps(dict)
如果你的字典不是太大,也许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来获得额外的安全性。
我认为你应该考虑使用shelve模块,它提供了持久的文件支持的字典类对象。它很容易取代“真正的”字典,因为它几乎透明地为你的程序提供了可以像字典一样使用的东西,而不需要显式地将其转换为字符串,然后写入文件(反之亦然)。
shelve
主要的区别是需要在第一次使用之前首先open()它,然后在你完成时close()它(并且可能sync()ing它,这取决于正在使用的writeback选项)。创建的任何“shelf”文件对象都可以包含常规字典作为值,允许它们在逻辑上嵌套。
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}
我使用yaml,如果需要可读(既不是JSON也不是XML, IMHO),或者如果阅读是不必要的,我使用pickle。
写
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
我使用json:
json
import json # convert to string input = json.dumps({'id': id }) # load to dict my_dict = json.loads(input)
在中文中,你应该做以下调整:
import codecs fout = codecs.open("xxx.json", "w", "utf-8") dict_to_json = json.dumps({'text':"中文"},ensure_ascii=False,indent=2) fout.write(dict_to_json + '\n')
为什么不使用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'}
如果你要求转换从字典到字符串,那么如何使用Python的str ()方法。
假设字典是:
my_dict = {'key1': 'key1value', 'key2': 'key2value'}
这将是这样做的:
str(my_dict)
将打印:
"{'key1': 'key1value', 'key2': 'key2value'}"
这是你喜欢的最简单的事。
将字典转换为JSON(字符串)
import json mydict = { "name" : "Don", "surname" : "Mandol", "age" : 43} result = json.dumps(mydict) print(result[0:20])
会让你:
{"name": "Don", "sur .
将字符串转换为字典
back_to_mydict = json.loads(result)
如果你关心速度,请使用ujson (UltraJSON),它具有与json相同的API:
import ujson ujson.dumps([{"key": "value"}, 81, True]) # '[{"key":"value"},81,true]' ujson.loads("""[{"key": "value"}, 81, true]""") # [{u'key': u'value'}, 81, True]
我发现问题不在于我的dict对象,它是RubyString类型的键和值,加载后用rubymarshal 'loads'方法
所以我这样做了:
dic_items = dict.items() new_dict = {str(key): str(value) for key, value in dic_items}
你可能会发现json.dumps()方法需要帮助处理一些对象类型。
json.dumps()
这篇文章的顶部答案具有以下属性:
import json json.dumps(my_dictionary, indent=4, sort_keys=True, default=str)