将字典的字符串转换为列表,删除单引号

时间:2017-07-06 17:44:24

标签: python python-2.7

我有一个包含字典的字符串,我想将其转换为列表,但在执行相同操作时无法删除单引号。

有人可以帮我弄清楚这里缺少什么吗?

>>> a = '{"src_ports": [7] , "dst_ports": [8]}'

我想要的是:

[{"src_ports": [7] , "dst_ports": [8]}]

但我得到的是:

>>> a = [a]
>>> a
['{"src_ports": [7] , "dst_ports": [8]}']

编辑: 随着ast,字典元素的顺序发生了变化,我需要保持完整。

>>> import ast
>>> b = [ast.literal_eval(a)]
>>> b
[{'dst_ports': [8], 'src_ports': [7]}]

2 个答案:

答案 0 :(得分:3)

>>> import ast >>> [ast.literal_eval(a)] [{'src_ports': [7], 'dst_ports': [8]}]

json.loads

>>> import collections >>> import json >>> [json.loads(a, object_pairs_hook=collections.OrderedDict)] [OrderedDict([('src_ports', [7]), ('dst_ports', [8])])]

(保留订单。)

OrderedDict

请注意,{{1}}仍然是字典,因此您可以像访问普通字符一样访问其元素。

答案 1 :(得分:0)

您可以将ast.literal_eval()功能用作更安全的eval()

import ast

a = '{"src_ports": [7] , "dst_ports": [8]}'

b = [ast.literal_eval(a)]
# [{'dst_ports': [8], 'src_ports': [7]}]

更新 - 如果您的结构保持不变,如果您想保留订单,则可以将json模块与collections.OrderedDict结合使用。请记住,Python dict和JSON通常都是无序结构:

import json
import collections

a = '{"src_ports": [7] , "dst_ports": [8]}'

b = json.loads(a, object_pairs_hook=collections.OrderedDict)

但是如果你将它打印出来,你就可以获得类似OrderedDict([(u'src_ports', [7]), (u'dst_ports', [8])])的内容,但是你的订单会被保留下来,例如,如果你以后将其序列化或循环播放它。