簡體   English   中英

使用json,python保存其鍵是元組的字典

[英]Saving dictionary whose keys are tuples with json, python

我正在python中編寫一個小程序,我正在使用一個字典(如標題所示)鍵和值是元組。 我試圖使用如下json

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

問題是我一直得到TypeError: keys must be a string

我怎么去做呢? 我試着查看python文檔,但沒有看到任何明確的解決方案。 謝謝!

您需要先將元組轉換為字符串:

json.dumps({str(k): v for k, v in data.iteritems()})

當然,你最終會使用字符串而不是元組的元組:

'{"(1, 2, 3)": ["a", "b", "c"], "(2, 6, 3)": [6, 3, 2]}'

如果您想稍后加載數據,則無論如何都必須對其進行后處理。 因此我只是轉儲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')}

你可以使用ujson模塊。 ujson.dumps()接受元組作為字典中的鍵。 您可以通過pip安裝ujson。

對於Python 3 *用戶:除了@Martijn Pieters的回答,

dictonary.iteritems()無效,請將其替換為dictionary.items()

json.dumps({str(k): v for k, v in data.items()})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM