我正在寻找一种以相反顺序序列化 python 列表的有效方法。
我试图这样做,json.dumps(reversed(mylist))但显然json.dumps不接受迭代器。
我也可以这样做,json.dumps(list(reversed(mylist)))但是对于非常大的列表,效率非常低,而且我不需要创建临时列表,我希望动态序列化列表而不是创建临时列表。
我想我可以用json.JSONEncoder它,但我真的不知道我应该从default函数中返回什么。
我还必须坚持使用标准库,因为我没有安装其他软件包的自由。
到目前为止,我尝试了两种建议的解决方案,这是测试输出:
>>> timeit.timeit('li.reverse(); json.dumps(li)', number=1, globals=globals())
2.5034537549945526
>>> timeit.timeit('"[{}]".format(",".join(map(json.dumps,reversed(li))))', number=1, globals=globals())
41.076039729989134
Run Code Online (Sandbox Code Playgroud)
我仍然认为实现我自己的JSONEncoder会更有效,但我仍然不完全知道如何去做。
One way to avoid a copy is to reverse the list inplace, eg:
mylist.reverse()
json_string = json.dumps(mylist)
Run Code Online (Sandbox Code Playgroud)
Then mylist.reverse() it back if needs be.