我有dictionary
,其中keys
是tuples
:
tags = {'playlist': {('seen live', 21): 1, ('indie', 46): 1, ('british rock', 2): 1, ('alternative rock', 19): 1, ('00s', 2): 1, ('english', 2): 1, ('brit pop', 2): 1, ('pop rock', 2): 1, ('90s', 10): 1, ('classic rock', 3): 1, ('hard rock', 2): 1, ('Manchester', 4): 1, ('favorites', 1): 1, ('british', 61): 1, ('rock', 89): 1, ('alternative', 53): 1, ('punk', 1): 1, ('male vocalists', 2): 1, ('britpop', 100): 1, ('pop', 7): 1, ('UK', 4): 1, ('oasis', 9): 1, ('indie rock', 12): 1, ('Britrock', 3): 1, ('england', 1): 1, ('brit rock', 2): 1}}
我正在尝试将其上传到json
格式的目录,其中包含:
with open(path, 'w') as t:
json.dump(tags, t)
但似乎tuples
keys
不允许使用json.dump()
,因为我得到了此回溯:
TypeError: key ('seen live', 21) is not a string
这有解决方法吗?
答案 0 :(得分:1)
如果需要支持更多种类的数据类型,请改用pickle
模块。
import pickle
with open(path, 'w') as t:
pickle.dump(tags, t)
答案 1 :(得分:0)
如果要将数据保存为JSON,则需要将其转换为JSON可以使用的格式。我不知道你的数据是什么或者这是否是最佳选择,但作为一个例子,我将元组转换为一个可以在以后拆分的字符串。因此,例如,('alternative rock', 19)
变为'alternative rock 19'
。您可能需要其他一些格式,但这是一种合理的方法。
>>> tags = {'playlist': {('seen live', 21): 1, ('indie', 46): 1, ('british rock', 2): 1, ('alternative rock', 19): 1, ('00s', 2): 1, ('english', 2): 1, ('brit pop', 2): 1, ('pop rock', 2): 1, ('90s', 10): 1, ('classic rock', 3): 1, ('hard rock', 2): 1, ('Manchester', 4): 1, ('favorites', 1): 1, ('british', 61): 1, ('rock', 89): 1, ('alternative', 53): 1, ('punk', 1): 1, ('male vocalists', 2): 1, ('britpop', 100): 1, ('pop', 7): 1, ('UK', 4): 1, ('oasis', 9): 1, ('indie rock', 12): 1, ('Britrock', 3): 1, ('england', 1): 1, ('brit rock', 2): 1}}
>>> tags['playlist'] = {'{} {}'.format(*k):v for k,v in tags['playlist'].items()}
>>> print(tags['playlist'])
{'alternative 53': 1, 'oasis 9': 1, 'alternative rock 19': 1, 'british 61': 1, 'male vocalists 2': 1, 'brit rock 2': 1, 'england 1': 1, 'punk 1': 1, 'pop rock 2': 1, '00s 2': 1, 'seen live 21': 1, 'indie 46': 1, 'hard rock 2': 1, 'favorites 1': 1, 'Britrock 3': 1, 'english 2': 1, 'indie rock 12': 1, '90s 10': 1, 'classic rock 3': 1, 'brit pop 2': 1, 'pop 7': 1, 'british rock 2': 1, 'rock 89': 1, 'UK 4': 1, 'Manchester 4': 1, 'britpop 100': 1}
>>> json.dumps(tags)
'{"playlist": {"alternative 53": 1, "oasis 9": 1, "alternative rock 19": 1, "british 61": 1, "male vocalists 2": 1, "brit rock 2": 1, "england 1": 1, "punk 1": 1, "pop rock 2": 1, "00s 2": 1, "seen live 21": 1, "indie 46": 1, "hard rock 2": 1, "favorites 1": 1, "Britrock 3": 1, "english 2": 1, "indie rock 12": 1, "90s 10": 1, "classic rock 3": 1, "brit pop 2": 1, "pop 7": 1, "british rock 2": 1, "rock 89": 1, "UK 4": 1, "Manchester 4": 1, "britpop 100": 1}}'