0

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 ブロブの辞書を使用する場合の時間差:

  • いじり:0.0005秒
  • json>py>json: 0.0025 秒

5倍速い

20,000 の楽しみのために:

  • いじり': 0.333
  • json>py>json: 0.813

60% 以上高速

200,000:

  • いじる: 4.5
  • json>py>json: 10.25

60% 以上高速

4

1 に答える 1

4

Pythonic の方法は、JSON 文字列を解析し、値を変更してからシリアル化することです。JSON は非常に高速に解析でき、標準の pickle/unpickle 関数よりもはるかに高速であり、膨大な量のデータ (数万行) がない限り、おそらく速度が低下することはありません。時期尚早に最適化するという罠にはまらないでください。

いずれにせよ、アプリケーションは常に適切で Pythonic で読みやすい方法で作成し、(必要に応じて!) コードの遅い部分を後で最適化する必要があります。


最適化のもう 1 つの方法は、関連するコードを C で記述するか、C ライブラリを使用して JSON シリアル化を行うことです。Ultrajsonを参照するか、この回答を参照してください。これは、標準ライブラリが使用しているモジュールsimplejsonよりもはるかに高速になる方法を説明しています。json

于 2013-01-29T21:53:53.177 に答える