2017-02-02 5 views
0

http投稿のペイロードであるcollections.OrderedDict()を返す関数があります。OrderedDictsをファイルに書き込んでリストに戻す方法は?

http投稿が失敗したときにオフラインのデータをログに記録する必要があるので、すべてのdictsをファイルに書き込んでリストとして読み込みたいのですが、リストを作成してリストに追加することはできますが、いくつかのいずれかがこの問題を解決するために私を助けてもらえ

ファイルに書き込み、リストに読み戻す、

することで、リスト

+0

ファイルを使用せずにしていただけますか? –

+1

'list(dictionary.items()' –

+0

返信のためにピーターさんに感謝します。ディクテーションが何万にもなり、リストを保持することは必須ではないので、ファイル書き込みは必須です:( –

答えて

0

としてdictの項目を取得するための良いアイデアがある場合は、変換することができ提案してください辞書のリストをjsonにコピーし、.jsonファイルに保存します。 それから、読んでそれはケーキの一部になります。

from collections import OrderedDict 
import json 
dic = OrderedDict() 
dic['hello'] = 'what up' 
dic_2 = OrderedDict() 
dic_2['hey, second'] = 'Nothing is up' 

with open('file.json', 'w') as f: 
    dictionaries = [dic, dic_2] 
    f.write(json.dumps(dictionaries)) 
with open('file.json', 'r') as read_file: 
    loaded_dictionaries = json.loads(read_file.read()) 
    print(loaded_dictionaries[0]) 

出力:

{'hello': 'what up'} 

これはきれいに限り、辞書のキー/値は、これらのタイプのいずれかであるとして動作します:dict, list, str, int, float, bool, None

+0

あなたの応答のためのおかげでnether、dictオブジェクトは、サーバ –

+0

に送信したい場合は、更新する必要があるときはいつでもファイルをもう一度開いて、ファイルを読み込んでそのファイルから 'list'を取得し、リストに追加し、リストをjson.dumpsでjsonに変換しますリストを変更してファイルに書き出します。 – Nether

+0

リストをjsonに戻さずに間違って読んだら、json.loadsを使用してファイルをリストに戻し、新しいdictを追加してから、書き戻しますing json.dumps、最後に私はdictを渡す必要があるとき、私はjson.loadsでファイル全体を読んで送信します。あなたの解決策は素晴らしいです、ありがとう@Nether –

2

データのシリアル化にjsonを使用します。

import json 
import collections 

d = collections.OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 

s = json.dumps(list(d.items())) 
print(s) 

value = json.loads(s) 
print(value) 

jsonはオブジェクトを文字列'[["a", 1], ["b", 2], ["c", 3]]'にシリアル化します。その後、jsonはデータをPythonオブジェクトに読み戻すことができます。

jsonは非常に一般的であり、多くの言語で使用されています。ほとんどのWebアプリケーションでは、jsonを使用してアプリをRESTfulにするのに役立ちます。

+0

あなたの応答のためにありがとう、dictは時間とともに成長し続けます。私はdictオブジェクトを取得するたびにファイルを追加する必要があります。あなたが代替品を持っている場合はお勧めします –

+0

私はいくつかのコードを参照する必要があります。複数の辞書がある場合、 'dict.update(other_dict)'を呼び出すと辞書がマージされます。 – HashSplat

関連する問題