2009-10-18 252 views
2

我有一個字符串輸出,它是以字典形式出現的。將字符串解析爲字典

{'key1':'value1','key2':'value2'} 

如何輕鬆地將它保存爲字典而不是字符串?

+0

保存它在哪裏/如何? – SilentGhost 2009-10-18 16:17:23

+0

什麼?爲什麼不把dict保存爲dict而不是首先創建一個字符串?請提供一些更多的背景資料。這個問題沒有什麼意義,並表示更大和更深的問題可能導致這一點。 – 2009-10-18 19:59:51

+3

正如Dave指出的,http://stackoverflow.com/questions/988228/converting-a-string-to-dictionary是這個 – dbr 2009-10-18 23:56:30

回答

3

astr是一個「以字典形式」的字符串。 ast.literal_eval將其轉換爲python字典對象。

In [110]: import ast 

In [111]: astr="{'key1':'value1','key2':'value2'}" 

In [113]: ast.literal_eval(astr) 
Out[113]: {'key1': 'value1', 'key2': 'value2'} 
+6

請注意,如果有'astr'可以包含'os.remove(「foo」)''的任何方法,那麼使用'eval'並不是一個好主意。實際上, – 2009-10-18 17:14:23

1

使用json.loads - 可能會更快

+1

,json.loads – hasen 2009-10-19 01:31:35

3

這是最好的,如果你對Python的2.6+,因爲它不是受制於EVAL安全漏洞。

import ast 

s = """{'key1':'value1','key2':'value2'}""" 
d = ast.literal_eval(s) 
+0

你搞砸了報價。外部使用雙引號。 – 2009-10-18 23:11:02

1

你從哪裏得到這個字符串?它是JSON格式嗎?或python字典格式?或者只是一些類似於python字典的ad-hoc格式?

如果是JSON,或者它只是字典,並且只包含字符串和/或數字,則可以使用json.loads,這是最安全的選項,因爲它無法分析python代碼。

這種做法有一些不足之處,雖然,如果例如,該字符串用單引號',而不是雙引號",更何況,它只是解析JSON對象/數組,其中僅巧合碰巧有着相似語法與pythons dicts /數組。

雖然我認爲這可能是你得到的字符串是以JSON格式。我做這個假設是因爲它是數據交換的通用格式。