将python字符串转换为字典

2024-10-04 11:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有行的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}}

当我尝试使用将行转换为字典时,以下代码:

^{pr2}$

我得到了以下回溯:

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

什么是正确的方法来提取,转换字典中的字符串?在


Tags: inpynodeconvertstring字典libusr
3条回答

我认为应该使用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)

我想你是想用引号把钥匙包起来:

import ast
ast.literal_eval('{"MGY": {1: 85, 2: 15}}') # {'MGY': {1: 85, 2: 15}}

ast.literal_eval可以解析字符串文本,但是MGY本身对它没有任何意义。在

相关问题 更多 >