[英]converting python string to dictionary
我有一行的excel文檔,如下所示:
{MGY: {1: 85, 2: 15}}
{MGY: {1:85, 2:15}, MWH: {1:99, 2:1}, MDE: {1:60, 2:40}, MIN: {1:60, 2:40}}
{MGY: {1:85, 2:15}}
{MWH: {1:99, 2:1}}
{MGY: {1:85, 2:15}}
當我嘗試使用以下代碼將行轉換為字典時:
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> meta = {u'CODE': u'N03', u'FABRIC': u'Jersey', u'Colour mix': u'{MGY: {1: 85, 2: 15}}', u'WEIGHT G': 165, u'Main': u'3:100', u'WEIGHT OZ': 4}
>>> colour_mix = meta['Colour mix']
>>> colour_mix
u'{MGY: {1: 85, 2: 15}}'
>>> import ast
>>> melange_items = ast.literal_eval(colour_mix)
我得到以下回溯:
Traceback (most recent call last):
File "styles_fabric.py", line 194, in <module>
styleMeta = fabric_composition(style)
File "styles_fabric.py", line 185, in fabric_composition
melange_items = ast.literal_eval(dd)
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/usr/lib/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/usr/lib/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/usr/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
提取,轉換字典中的字符串的正確方法是什么?
我認為您打算將密鑰包裝在引號中:
import ast
ast.literal_eval('{"MGY": {1: 85, 2: 15}}') # {'MGY': {1: 85, 2: 15}}
ast.literal_eval
可以解析字符串文字,但是MGY本身並不意味着任何意義。
我認為您應該使用JSON而不是Python表示法來將數據保留為字符串
>>> meta = {u'CODE': u'N03', u'FABRIC': u'Jersey', u'Colour mix': u'{MGY: {1: 85, 2: 15}}', u'WEIGHT G': 165, u'Main': u'3:100', u'WEIGHT OZ': 4}
>>> import json
>>> str = json.dumps(meta)
>>> str
'{"CODE": "N03", "FABRIC": "Jersey", "Colour mix": "{MGY: {1: 85, 2: 15}}", "WEIGHT G": 165, "Main": "3:100", "WEIGHT OZ": 4}'
>>> meta2 = json.loads(str)
>>> meta == meta2
True
JSON是為此目的而設計的,因此您有更大的機會讓json
包的作者考慮將數據保留為字符串的所有方面。 ast
作者可能正在考慮源代碼。
嘗試使用Yaml for Python處理無法理解的json數據,這是一個示例:
import yaml
import ast
meta = {u'CODE': u'N03', u'FABRIC': u'Jersey', u'Colour mix': u'{MGY: {1: 85, 2: 15}}', u'WEIGHT G': 165, u'Main': u'3:100', u'WEIGHT OZ': 4}
colour_mix = meta['Colour mix']
str_json_data = str(yaml.load(colour_mix))
print str_json_data
print ast.literal_eval(str_json_data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.