我有一个JSON序列化值的python字典。
我想在没有先执行loads(...)
的情况下添加这些序列化字符串,然后再执行dumps(...)
- 所以我对序列化值进行了调整:
目前我有:
for key, value in my_dict.items():
# creating JSON of additional data I want in the JSON string
extra = dumps({ 'key1': 3, 'key2': 1 }, default=str)
# cutting the last '}' from the end off 'value', the '{' and '}' from the
# start and end of 'extra', and then concatting them together.
my_dict[key] = '%s,%s' % (value[:-1], extra[1:])
我这样做是因为我认为dumps
和loads
是浪费,但我现在的方法并不是非常pythonic。
有更好的方法吗?
注意:'额外'值来自不同的源到初始JSON值,并且无法在原始数据序列化的位置插入。
使用~20 JSON blob的字典时的时差:
快5倍
和20,000的乐趣:
快60%以上
200,000:
快60%以上
答案 0 :(得分:4)
Pythonic的方法是解析JSON字符串,修改值然后序列化它。 JSON 非常快速解析,比标准的pickle / unpickle函数快得多,并且除非你有大量数据(数万行),否则可能不会减慢速度。不要陷入过早优化的陷阱。
在任何情况下,您都应该以一种漂亮的,Pythonic和可读的方式编写应用程序,然后(如果需要!)稍后优化代码的慢速部分。
另一种优化方法可能是用C编写相关代码,或者使用C库进行JSON序列化。请查看ultrajson或查看this answer,其中说明了标准库simplejson
如何比您正在使用的json
模块快得多。