web-dev-qa-db-ja.com

python3でOrderedDictを通常のdictに変換する方法

私は次の問題に苦労しています:OrderedDictをこのように変換したい:

OrderedDict([('method', 'constant'), ('data', '1.225')])

このような通常の辞書に:

{'method': 'constant', 'data':1.225}

データベースに文字列として保存する必要があるためです。変換後、順序はもう重要ではないので、とにかく注文した機能を節約できます。

ヒントや解決策をありがとう、

ベン

79
Ben A.
>>> 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を使用すると、順序を維持することもできます。

69
ThiefMaster

これは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
51
thiruvenkadam

次のように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)
7
Kyle Neary

以下はpython 3.7で最も簡単に見える機能です。

d = OrderedDict([('method', 'constant'), ('data', '1.225')])
d2 = dict(d)  # Now a normal dict
2
radtek

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)
2
spg

その簡単な方法

>>import json 
>>from collection import OrderedDict

>>json.dumps(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))
0
Ramesh K