我正在寫一個小程序在Python中,我正在使用一個字典,其(如標題所示)鍵和值是元組。我想使用JSON如下保存字典的關鍵是元組與json,python
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文檔,但沒有看到任何明確的解決方案。謝謝!
我正在寫一個小程序在Python中,我正在使用一個字典,其(如標題所示)鍵和值是元組。我想使用JSON如下保存字典的關鍵是元組與json,python
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]}'
知道如何扭轉此動作會很有趣。 –
@RickyRobinson:'ast.literal_eval()'會重構字符串中的Python值。 –
這對python3中的我有效:converted = {ast.literal_eval(k):v for k,v in json.items()} – Johan
如果你想稍後加載您的數據,您必須後處理它。所以我只是轉儲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')}
對於Python 3 *用戶: 除了@Martijn Pieters的答案,
dictonary.iteritems()
是無效的,與dictionary.items()
更換:
json.dumps({str(k): v for k, v in data.items()})
您可以使用ujson模塊。 ujson.dumps()接受元組作爲字典中的鍵。 你可以通過pip來安裝ujson。
但是,JSON格式要求鍵是字符串... – kennytm
我可以將它解析爲字符串嗎? – Yotam
爲什麼你需要元組作爲鍵? – seriousdev