我正在编写一个将数据存储在字典对象中的程序,但是这个数据需要在程序执行期间的某个时刻保存,并在程序再次运行时加载回字典对象。 如何将字典对象转换为可以写入文件并加载回字典对象的字符串?这有望支持包含词典的词典。
答案 0 :(得分:182)
如果你的字典不是太大,也许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以获得额外的安全性。
答案 1 :(得分:176)
The json module是一个很好的解决方案。它具有优于pickle的优点,它只产生纯文本输出,并且是跨平台和跨版本的。
json.dumps(dict)
答案 2 :(得分:147)
我使用json
:
import json
# convert to string
input = json.dumps({'id': id })
# load to dict
my_dict = json.loads(input)
答案 3 :(得分:13)
使用pickle
模块将其保存到磁盘并稍后加载。
答案 4 :(得分:5)
如果在中国
panel1.AutoScrollMinSize = new Size(0, 10); // 10 or Minimum Height you require
答案 5 :(得分:5)
为什么不使用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'}"
这是您想要的简单
答案 6 :(得分:3)
我认为您应该考虑使用shelve
模块,该模块提供持久的文件支持的类字典对象。它很容易代替“真正的”字典,因为它几乎透明地为你的程序提供了一些可以像字典一样使用的东西,而不需要将它显式转换为字符串然后写入文件(或者反之亦然)。
主要区别在于,首次使用之前需要open()
,然后在完成之后close()
,并且可能会sync()
,具体取决于{{1}正在使用的选项)。任何“架子”文件对象创建都可以包含常规字典作为值,允许它们在逻辑上嵌套。
这是一个简单的例子:
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()
答案 7 :(得分:1)
我发现问题不在于我的 dict 对象,而是在使用 RubyMarshl 'loads' 方法加载之后属于 RubyString 类型的键和值
所以我这样做了:
dic_items = dict.items()
new_dict = {str(key): str(value) for key, value in dic_items}
答案 8 :(得分:0)
如果需要可读,我使用yaml(JSON和XML都不是恕我直言),或者如果没有必要阅读,我会使用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
答案 9 :(得分:0)
将字典转换为JSON(字符串)
import json
mydict = { "name" : "Don",
"surname" : "Mandol",
"age" : 43}
result = json.dumps(mydict)
print(result[0:20])
会让您:
{“名称”:“ Don”,“ sur
将字符串转换为字典
back_to_mydict = json.loads(result)
答案 10 :(得分:0)
如果您关心速度,请使用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]
答案 11 :(得分:-5)
使用传统方法而不是简单的库 。这对我有用
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
d=" "
for i in dict:
a=i
b=dict[i]
c=i+":"+dict[i]
d=d+c+'\n'
print d