如何将字符串转换回freezeset?

时间:2014-01-17 22:41:41

标签: python json

我使用字典d作为字典dd的键。为此,我将dd的键转换为frozensets。我需要将dd存储在txt文件中,因此我将freezeset键转换为字符串;结果字典是“新的”。然后我json编码“新”。

如何将“new”转换回字典并将密钥转换回frozensets? (如果有比使用frozensets和json更好的方式,那么我很乐意听到它。)

new = {}
d = {'key1':'value1'}
dd = {frozenset(d.items()):'my_value'}
for k,v in dd.iteritems(): 
  new[str(k)] = v
new = json.dumps(new)

newest = json.loads(new)
for k,v in newest.iteritems():
  print frozenset(k)

### result ###
frozenset([' ', "'", ')', '(', ',', '1', '[', ']', 'a', 'e', 'f', 'k', 'l', 'o', 'n', 's', 'r', 'u', 't', 'v', 'y', 'z'])

2 个答案:

答案 0 :(得分:0)

import pickle  

d = {'key1':'value1'}
dd = {frozenset(d.items()):'my_value'}

# Save to dumpfile
pickle.dump(dd, open('dumpfile', 'wb'))

# Load again from dumpfile
dd = pickle.load(open('dumpfile', 'rb'))

答案 1 :(得分:0)

请您使用json.loads

加载数据
newest = json.loads(new)
    for k,v in newest.iteritems():
        ....

您仍然将字符串值设置为k,因为您将其解析为

中的字符串
new[str(k)] = v

所以,你必须eval喜欢:

for k,v in newest.iteritems():
    k = eval(k)

它会从你的字符串中解析原文。