اذهب إلى المحتوى

السؤال

نشر

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

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

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

Recommended Posts

  • 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'}

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

المصدر

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...