好的,我可以使用OrderedDict了json.dump.也就是说,OrderedDict可以用作JSON的输入.
但它可以用作输出吗?如果是这样的话?在我的情况下,我想load进入OrderedDict,这样我就可以保持文件中键的顺序.
如果没有,是否有某种解决方法?
我正在使用以下课程轻松存储我的歌曲数据.
class Song:
"""The class to store the details of each song"""
attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
def __init__(self):
for att in self.attsToStore:
exec 'self.%s=None'%(att.lower()) in locals()
def setDetail(self, key, val):
if key in self.attsToStore:
exec 'self.%s=val'%(key.lower()) in locals()
Run Code Online (Sandbox Code Playgroud)
我觉得这比写出一个if/else块更具可扩展性.但是,eval似乎被认为是一种不良做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?
我有一个字符串,基本上包含一堆JSON格式的文本,我最终希望以"漂亮的打印"格式导出到Excel,并使用适当的嵌套缩进等.
为了便于阅读,必须保留密钥/值的原始顺序.我的思维过程是为了实现我想要的
a)使用类似eval之类的东西将字符串转换为字典,以及b)使用集合库中的OrderedDict来保持订单的完整性.
但是我没有得到预期的结果:
In [21]: json_string = str({"id":"0","last_modified":"undefined"})
In [22]: OrderedDict(eval(json_string))
Out[23]: OrderedDict([('last_modified', 'undefined'), ('id', '0')])
Run Code Online (Sandbox Code Playgroud)
我还没有完全弄清楚我将如何以漂亮的打印格式将输出写入excel,但我希望这是相对容易的部分!