• 0

كيف أحوّل سلسلة نصية إلى قاموس في بايثون ؟

أريد تحويل سلسلة نصية على شكل قاموس إلى قاموس كما في هذا المثال:

s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"

فما هي الطريقة الأفضل لفعل ذلك وهل هنالك حلول أخرى بدون استخدام eval ؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك العديد من الخيارات الجيدة بدلا من eval، فبداية من الإصدار 2.6 للبايثون تمت إضافة دالة literal_eval إلى مكتبة ast والتي سهلت من عمليات التحويل للسلاسل النصية كما في المثال التالي:

>>> import ast
>>> ast.literal_eval("{'muffin' : 'lolz', 'foo' : 'kitty'}")
{'muffin': 'lolz', 'foo': 'kitty'}

وتعتبر هذه الدالة أفضل من eval حسب توثيقها الرسمي.
ويمكنك أيضا حل هذه المشكلة عن طريق استخدام JSON الذي سيقوم باستبدال الرمز ' بالرمز المزدوج " كما في هذا المثال:

import json
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
json_acceptable_string = s.replace("'", "\"")
d = json.loads(json_acceptable_string)
# d = {u'muffin': u'lolz', u'foo': u'kitty'}

يذكر أنه إذا كان لديك الرمز ' كجزء من المفاتيح أو القيم فسوف تفشل عملية التحويل بسبب تبديل الأحرف.

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن