![](/img/trans.png)
[英]change dictionary values to dictionaries from list of dictionaries in 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.