簡體   English   中英

在python中將字符串轉換為字典

[英]Converting a string to dictionary in python

我有以下字符串:

str = "{application.root.category.id:2}"

我想將上面的內容轉換為python中的字典數據類型,如下所示:

dict = {application.root.category.id:2}

我嘗試使用eval(),這是我得到的錯誤:

AttributeError:java包'application'沒有屬性“root”

我當前的python是<2.3,我無法將python更新為> 2.3。

有解決方案嗎

Python字典具有不必是字符串的鍵; 因此,當你寫{a: b} ,如果它是一個字符串,你需要在a周圍加引號。 (例如, {1:2}整數 1映射到整數2.)

所以你不能只是通過你的類的東西eval 你需要自己解析它。 (或者,如果碰巧更容易,更改生成它的任何內容都會在鍵周圍加上引號。)

究竟如何解析它取決於你的詞典實際上是什么樣的; 例如,價值觀本身可以是詞典,還是總是數字,或者是什么? 這是一個簡單而且可能過於粗糙的方法:

contents = str[1:-1]        # strip off leading { and trailing }
items = contents.split(',') # each individual item looks like key:value
pairs = [item.split(':',1) for item in items] # ("key","value"), both strings
d = dict((k,eval(v)) for (k,v) in pairs) # evaluate values but not strings

首先,'dict'是類型名稱,因此對變量名稱不利。

以下,正如您所問的那樣......

a_dict = dict([str.strip('{}').split(":"),])

但是,正如我所期望的那樣,如果要在字典中添加更多映射,則需要采用不同的方法。

假設我有一個字符串

str='{1:0,2:3,3:4}'
str=str.split('{}')
mydict={}
for every in str1.split(','):
    z=every.split(':')
    z1=[]
    for every in z:
        z1.append(int(every))
    for k in z1:
        mydict[z1[0]]=z1[1]

輸出: mydict {1: 0, 2: 1, 3: 4}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM