অর্ডারডিক্টকে কীভাবে পাইথন 3 এ নিয়মিত ডকে রূপান্তর করবেন


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
হ্যাঁ এটি অর্ডার হারায়।
নয়েল

অজগর <3.0 এও json.loads ক্রম সংরক্ষণ করে না।
নয়েল

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')]))

আপনার ডাটাবেজে স্ট্রিং হিসাবে যদি এটি সঞ্চয় করতে হয় তবে জেএসএন ব্যবহার করে যাবার উপায়। এটিও বেশ সহজ এবং আপনার নিয়মিত রূপান্তরিত হওয়ার বিষয়েও চিন্তা করতে হবে না 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)

তথ্যগুলিতে তালিকাগুলি পরিচালনা করে না।
রাফ

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')])))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.