Python3 में एक नियमित डिक्टेट में एक ऑर्डरडीड को कैसे परिवर्तित करें


109

मैं निम्नलिखित समस्या से जूझ रहा हूं: मैं OrderedDictइस तरह से रूपांतरण करना चाहता हूं :

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

इस तरह एक नियमित रूप से तानाशाही में:

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

क्योंकि मुझे इसे एक डेटाबेस में स्ट्रिंग के रूप में संग्रहीत करना है। रूपांतरण के बाद आदेश अब महत्वपूर्ण नहीं है, इसलिए मैं वैसे भी आदेशित सुविधा को छोड़ सकता हूं।

किसी भी संकेत या समाधान के लिए धन्यवाद,

बेन


1
repr(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))?
इरूवर

हाँ, यह भी काम करता है। धन्यवाद!
बेन ए।

जवाबों:


95
>>> 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 या अचार जैसे प्रारूप में परिवर्तित करना बेहतर होगा। अचार के साथ आप भी आदेश की रक्षा!


6
आप के साथ आदेशjson को संरक्षित कर सकते हैं
jfs

धन्यवाद, और अचार का उपयोग करने की सलाह के लिए भी। मैं अचार का उपयोग करता हूं और मैं वास्तव में इसे अन्य स्थानों पर करता हूं, लेकिन कुछ बाधाएं स्ट्रिंग में परिवर्तित एक तानाशाही का उपयोग करके मांग करती हैं।
बेन ए।

तानाशाही को ढीले क्रम में परिवर्तित करना होगा?
रामप्रसाद बिस्मिल

2
हाँ, यह आदेश खो देता है।
21

json.loads भी python <3.0 में ऑर्डर को संरक्षित नहीं करता है।
नाॅल

70

भले ही यह एक साल पुराना सवाल है, लेकिन मैं यह कहना चाहूंगा कि 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

8
एक स्क्रिप्ट आदि के लिए अच्छा कदम, यानी मैं इस एक-टास्क के लिए प्रदर्शन के बारे में परवाह नहीं करता, सिर्फ मुझे
गिफ्ट करता

7

अपने 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)

6

यदि आप 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)

डेटा में सूचियों को हैंडल नहीं करता है।
Rafe

1

यहाँ वही है जो सबसे सरल लगता है और अजगर 3.7 में काम करता है

from collections import OrderedDict

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

अब इसे जांचने के लिए:

>>> type(d2)
<class 'dict'>
>>> isinstance(d2, OrderedDict)
False
>>> isinstance(d2, dict)
True

नोट: यह भी काम करता है, और एक ही परिणाम देता है -

>>> {**d}
{'method': 'constant', 'data': '1.225'}
>>> {**d} == d2
True

साथ में यह भी -

>>> dict(d)
{'method': 'constant', 'data': '1.225'}
>>> dict(d) == {**d}
True

चियर्स


0

अगर किसी तरह आप एक सरल, फिर भी अलग समाधान चाहते हैं, तो आप {**dict}वाक्यविन्यास का उपयोग कर सकते हैं :

from collections import OrderedDict

ordered = OrderedDict([('method', 'constant'), ('data', '1.225')])
regular = {**ordered}

-3

इसका सरल तरीका है

>>import json 
>>from collection import OrderedDict

>>json.dumps(dict(OrderedDict([('method', 'constant'), ('data', '1.225')])))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.