将python dict转换为字符串并返回

AJ0*_*200 248 python serialization dictionary

我正在编写一个将数据存储在字典对象中的程序,但是这个数据需要在程序执行期间的某个时刻保存,并在程序再次运行时加载回字典对象.如何将字典对象转换为可以写入文件并加载回字典对象的字符串?这有望支持包含词典的词典.

Tyl*_*ves 224

json模块在这里是一个很好的解决方案.它具有优于pickle的优点,它只产生纯文本输出,并且是跨平台和跨版本的.

import json
json.dumps(dict)
Run Code Online (Sandbox Code Playgroud)

  • 您应该添加一个简单示例,以允许用户查看如何执行此操作. (26认同)
  • 在这一点上,Pickle往往被视为相当弃用.我总是用json做这样的事情.(相对)人类可读是一个很大的时间. (5认同)
  • 我还将看一下该模块。json和pickle看起来都足够易于使用,因此可以归结为跨平台支持之类的东西。谢谢 (2认同)
  • :foreheadslap: 不要像我一样忘记 `import json`! (2认同)

Pab*_*loG 197

如果你的字典不是太大,也许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
Run Code Online (Sandbox Code Playgroud)

如果源不受信任,您可以使用ast.literal_eval而不是eval来获得额外的安全性.

  • 我并没有真正准备好处理可能在代码中引入的漏洞.我不知道json或pickle可能有什么问题,但我知道在这种情况下eval会很危险. (12认同)
  • @ AJ00200:和我提到的ast.literal_eval替代方案?从Python帮助:"安全地评估表达式节点或包含Python表达式的字符串.提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None.可用于从不受信任的来源安全地评估包含Python表达式的字符串,而无需自己解析值." (5认同)
  • `ast.literal_eval` 选项确实要好得多,但可能并不比使用 json 库更好。建议对可能不受信任的数据使用“eval”是一个巨大的安全问题。“eval”几乎从来都不是正确的答案,如果滥用,可能会产生灾难性的后果,这个答案的临时读者似乎可能会这样做。 (2认同)

Eya*_* Ch 155

我用json:

import json

# convert to string
input = json.dumps({'id': id })

# load to dict
my_dict = json.loads(input) 
Run Code Online (Sandbox Code Playgroud)


ism*_*ail 14

使用该pickle模块将其保存到磁盘并稍后加载.

  • 让我们先了解基础知识,好吗?表现是下一个;) (31认同)
  • cPickle更快. (4认同)
  • @extraneon实际上,它是这个问题的答案.它将它转换为某个字符串并将其写入文件.我不必进行实际的转换或文件写入,因为它全部由pickle封装. (2认同)

Fig*_*ode 10

为什么不使用Python 3的内置ast库的函数literal_eval。最好使用literal_eval而不是eval

import ast
str_of_dict = "{'key1': 'key1value', 'key2': 'key2value'}"
ast.literal_eval(str_of_dict)
Run Code Online (Sandbox Code Playgroud)

将输出作为实际字典

{'key1': 'key1value', 'key2': 'key2value'}
Run Code Online (Sandbox Code Playgroud)

而且,如果您要求将Dictionary转换为String,那么如何使用Python的str()方法。

假设字典是:

my_dict = {'key1': 'key1value', 'key2': 'key2value'}
Run Code Online (Sandbox Code Playgroud)

这将像这样完成:

str(my_dict)
Run Code Online (Sandbox Code Playgroud)

将打印:

"{'key1': 'key1value', 'key2': 'key2value'}"
Run Code Online (Sandbox Code Playgroud)

这是您想要的简单操作。


Har*_*vey 7

将字典转换为 JSON(字符串)

import json 

mydict = { "name" : "Don", 
          "surname" : "Mandol", 
          "age" : 43} 

result = json.dumps(mydict)

print(result[0:20])
Run Code Online (Sandbox Code Playgroud)

会让你:

{"name": "Don", "sur

将字符串转换为字典

back_to_mydict = json.loads(result) 
Run Code Online (Sandbox Code Playgroud)


小智 5

如果在中国

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')
Run Code Online (Sandbox Code Playgroud)

  • 如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。 (2认同)