如何在python中将字符串dict转换为字典

时间:2013-11-12 12:15:27

标签: python django

a= {'Locator__creation_date': {'start': datetime.date(2013, 11, 14), 'end': datetime.date(2013, 11, 14)}, 'Locator__employed': u'True', 'Locator__employer_state': u'AL', 'Locator__receiving_hiv_treatment': u'True', 'Locator__hiv_treatment_state': u'AR', 'Locator__mental_health_provider': u'False', 'Locator__parole': u'True', 'Locator__parole_state': u'IA', 'data_model_name': ['Locator']}

ast.literal_eval(a)

它给出了

ValueError: malformed string

1 个答案:

答案 0 :(得分:2)

大概你认为a是一个字符串:

a = "{'Locator__creation_date': {'start': datetime.date(2013, 11, 14), 'end': datetime.date(2013, 11, 14)}, 'Locator__employed': u'True', 'Locator__employer_state': u'AL', 'Locator__receiving_hiv_treatment': u'True', 'Locator__hiv_treatment_state': u'AR', 'Locator__mental_health_provider': u'False', 'Locator__parole': u'True', 'Locator__parole_state': u'IA', 'data_model_name': ['Locator']}"

这不起作用,因为datetime.date(...)不是Python文字。它表示Python datetime.date()对象,ast.literal_eval()不处理任意类型。

Python文字值({...}用于词典或集合,[...]用于列表,(...)用于元组,数字用于数字和字符串文字(如{ {1}}以及u'...'r'...'以及各种引用变体)都会得到处理。请参阅Literals section of the Python expressions documentationast.literal_eval() documentation本身:

  

提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和'...'