Python convert string object into dictionary

前端 未结 4 1334
太阳男子
太阳男子 2021-01-14 21:48

I have been working to build a complex data structure which would return a dictionary. Currently that class return string object of the form

{
   cset : x,           


        
相关标签:
4条回答
  • 2021-01-14 21:59

    If you are careful enough to keep the code valid python, you could use eval:

    eval(yourlongstring)
    
    0 讨论(0)
  • 2021-01-14 22:13

    You probably do want to use Pickle:

    http://docs.python.org/library/pickle.html#pickle.dumps

    It can also return the value as a string, rather than writing to a file.

    0 讨论(0)
  • 2021-01-14 22:15

    Don't use eval. If you are sure that the string will always contain a valid Python dict, use ast.literal_eval. This works pretty much like eval, but it only evaluates if the expression is a valid dict,list, etc. and throws an exceptions if it isn't. This is way safer than trying to evaluate strings that may contain arbitrary code at runtime.

    From the docs:

    Safely evaluate an expression node or a string containing a Python expression. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.

    This can be used for safely evaluating strings containing Python expressions from untrusted sources without the need to parse the values oneself.

    Code Example:

    >>> import ast
    >>> ast.literal_eval("1+1")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.6/ast.py", line 68, in literal_eval
        return _convert(node_or_string)
      File "/usr/lib/python2.6/ast.py", line 67, in _convert
        raise ValueError('malformed string')
    ValueError: malformed string
    >>> ast.literal_eval("\"1+1\"")
    '1+1'
    >>> ast.literal_eval("{'a': 2, 'b': 3, 3:'xyz'}")
    {'a': 2, 3: 'xyz', 'b': 3}
    
    0 讨论(0)
  • 2021-01-14 22:23

    Is that the actual data format? Do you have any flexibility?

    It's very nearly JSON, which is a standard data format for which Python has native libraries for reading and writing (serialising and deserialising). However, to make it valid JSON both the keys and values would need to be surrounded by quotes:

    "cset" : "x",
    "b1"   : "y"
    

    and so on.

    0 讨论(0)
提交回复
热议问题