簡體   English   中英

在python中如何將字典值從字符串更改為字典?

[英]In python how do I change dictionary values from strings into dictionaries?

我有以下形式的字典: d={741178: u'{"width":37.8365,"height":150,"length":234},{"width":35.7,"height":178,"length":122}',741179: u'{"width":98.67,"height":180,"length":994},{"width":98.79,"height":167.8,"length":154.22}'}

我怎樣才能把它變成字典的字典? 我試過了:

for k, v in d.items():
    v = ast.literal_eval(v)

但這不起作用。 由於我的每個偽嵌套字典實際上都是一個字符串,我如何在字典中更改它們的數據類型?

您可以使用ast.literal_eval()json.loads() ,在這種情況下輸出幾乎相同。 但是,對於 JSON,您必須將字符串括在方括號中,因為它們都包含兩個以逗號分隔的字典,因此獲取它們的唯一合理方法是將它們作為字典列表。 對於 Python 文字,將方括號去掉(或用括號替換它們)會導致每對以逗號分隔的字典被解釋為 2 元組(應該是雙精度數,但已經具有不同的含義)。

我個人推薦使用json.loads() ,因為 JSON 目前是新項目中最常用的數據交換格式。 如果您的字符串源可以添加方括號以生成有效的 JSON,那將是最好的。

import ast
import json

d = {741178: u'{"width":37.8365,"height":150,"length":234},{"width":35.7,"height":178,"length":122}',
     741179: u'{"width":98.67,"height":180,"length":994},{"width":98.79,"height":167.8,"length":154.22}'}

p = {k: ast.literal_eval(v)   for k, v in d.items()}
j = {k: json.loads('['+v+']') for k, v in d.items()}

print(p)
print(j)

# {741178: ({'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}), 741179: ({'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22})}
# {741178: [{'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}], 741179: [{'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22}]}

如您所見,唯一的區別是( )[ ]

我已經更正了 json 並刪除了不必要的雙引號和逗號如果您想將字典作為值,您必須將值作為字典數組。

import json    
d={741178:
       u'{"width":37.8365,"height":150,"length":234},'
       u'{"width":35.7,"height":178,"length":122}',
   741179: u'{"width":98.67,"height":180,"length":994},'
           u'{"width":98.79,"height":167.8,"length":154.22}'

   }
for key, value in d.items():
    d[key]= json.loads('['+value+']')
print(d)

暫無
暫無

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

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