私は次の問題に苦労しています:OrderedDict
をこのように変換したい:
OrderedDict([('method', 'constant'), ('data', '1.225')])
このような通常の辞書に:
{'method': 'constant', 'data':1.225}
データベースに文字列として保存する必要があるためです。変換後、順序はもう重要ではないので、とにかく注文した機能を節約できます。
ヒントや解決策をありがとう、
ベン
>>> from collections import OrderedDict
>>> OrderedDict([('method', 'constant'), ('data', '1.225')])
OrderedDict([('method', 'constant'), ('data', '1.225')])
>>> dict(OrderedDict([('method', 'constant'), ('data', '1.225')]))
{'data': '1.225', 'method': 'constant'}
>>>
ただし、データベースに保存するには、JSONやPickleなどの形式に変換する方がはるかに良いでしょう。 Pickleを使用すると、順序を維持することもできます。
これは1年前の質問ですが、順序付き辞書内に順序付き辞書がある場合、dict
を使用しても役に立ちません。これらの再帰的順序辞書を変換できる最も簡単な方法は
import json
from collections import OrderedDict
input_dict = OrderedDict([('method', 'constant'), ('recursive', OrderedDict([('m', 'c')]))])
output_dict = json.loads(json.dumps(input_dict))
print output_dict
次のようにOrderedDict
を通常のDict
に簡単に変換できます。
dict(OrderedDict([('method', 'constant'), ('data', '1.225')]))
データベースに文字列として保存する必要がある場合は、JSONを使用する方法があります。これも非常に簡単で、通常のdict
への変換について心配する必要さえありません。
import json
d = OrderedDict([('method', 'constant'), ('data', '1.225')])
dString = json.dumps(d)
または、データをファイルに直接ダンプします。
with open('outFile.txt','w') as o:
json.dump(d, o)
以下はpython 3.7で最も簡単に見える機能です。
d = OrderedDict([('method', 'constant'), ('data', '1.225')])
d2 = dict(d) # Now a normal dict
json
モジュールを使用せずに再帰バージョンを探している場合:
def ordereddict_to_dict(value):
for k, v in value.items():
if isinstance(v, dict):
value[k] = ordereddict_to_dict(v)
return dict(value)
その簡単な方法
>>import json
>>from collection import OrderedDict
>>json.dumps(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))