使用json,python保存其键是元组的字典

Yot*_*tam 10 python json tuples

我正在python中编写一个小程序,我正在使用一个字典(如标题所示)键和值是元组.我试图使用如下json

import json
data = {(1,2,3):(a,b,c),(2,6,3):(6,3,2)}
print json.dumps(data)
Run Code Online (Sandbox Code Playgroud)

问题是我不断得到TypeError: keys must be a string.

我怎么去做呢?我试着查看python文档,但没有看到任何明确的解决方案.谢谢!

Mar*_*ers 13

您需要先将元组转换为字符串:

json.dumps({str(k): v for k, v in data.iteritems()})
Run Code Online (Sandbox Code Playgroud)

当然,你最终会使用字符串而不是元组的元组:

'{"(1, 2, 3)": ["a", "b", "c"], "(2, 6, 3)": [6, 3, 2]}'
Run Code Online (Sandbox Code Playgroud)

  • @RickyRobinson:`ast.literal_eval()`将重构字符串中的Python值. (5认同)
  • 这在python3中适用于我:converted = {ast.literal_eval(k):v代表k,v代表json.items()} (2认同)

小智 5

如果您想稍后加载数据,则无论如何都必须对其进行后处理.所以我只是转储data.items():

>>> import json
>>> a, b, c = "abc"
>>> data = {(1,2,3):(a,b,c), (2,6,3):(6,3,2)}
>>> on_disk = json.dumps(data.items())
>>> on_disk
'[[[2, 6, 3], [6, 3, 2]], [[1, 2, 3], ["a", "b", "c"]]]'
>>> data_restored = dict(map(tuple, kv) for kv in json.loads(on_disk))
>>> data_restored
{(2, 6, 3): (6, 3, 2), (1, 2, 3): (u'a', u'b', u'c')}
Run Code Online (Sandbox Code Playgroud)