Python 通过删除单引号将字典字符串转换为列表

Python 通过删除单引号将字典字符串转换为列表,python,python-2.7,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]}'] 但我得到的是: [{

我有一个字符串有字典,我想把它转换成一个列表,但无法删除单引号,而做同样的事情

有人能帮我找出这里缺少什么吗

>>> a = '{"src_ports": [7] , "dst_ports": [8]}'
我想要的是:

[{"src_ports": [7] , "dst_ports": [8]}]
>>> a = [a]
>>> 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]}]

您可以使用
ast.literal\u 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])
的东西,但是你的顺序会被保留,例如,如果你以后序列化它或循环它。

你可以使用
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])
的东西,但是你的顺序会被保留,例如,如果你以后序列化它或循环它。

ast.literal\u eval

json.loads
(维持秩序。)

请注意,
OrderedDict
仍然是一个字典,因此您可以像访问普通字典一样访问它的元素。

ast.literal\u eval

json.loads
(维持秩序。)



请注意,
orderedict
仍然是一个字典,因此您可以使用与普通字典相同的方式访问其元素。

import json;[json.loads(a)]
是否可以在不导入任何额外模块的情况下执行此操作?如果将
a
放在列表中时只将其设置为字符串,那么为什么要将其设置为字符串。为什么不从一开始就把它变成字典呢?我已经用一种方法编辑了我的答案,以保持顺序;[json.loads(a)]是否可以在不导入任何额外模块的情况下执行此操作?如果将
a
放在列表中时只将其设置为字符串,那么为什么要将其设置为字符串。为什么不从一开始就把它变成一本字典呢?我用一种方法编辑了我的答案以保持秩序。@wim,你是不是故意删除了我的
eval
答案?是的,不是这样,就是投了反对票。如果您喜欢向下投票,请回滚。@wim好吧,这并不重要,但OP需要一种不涉及导入的方法。@wim,您是否故意删除了我的
eval
答案?是的,要么是向下投票。如果您喜欢向下投票,请回滚。@wim好吧,这并不重要,但OP想要一个不涉及导入的方法。@zwer,我试过了,它改变了字典元素的顺序,在字典中是否保留了相同的顺序?@Sweety在3.6以下的Python中字典没有隐含的顺序。如果你愿意,我建议你使用
collections.OrderedDict
,这样可以保留顺序。我的想法是:
[OrderedDict([(u'src_ports',[7]),(u'dst_ports',[8])]
,但这对我不起作用,因为我需要完全相同格式的字典,只需要删除单引号。@Sweety-你想用字典做什么?你想把它作为一个字符串吗?我需要在进一步的操作中使用字典的列表:
[{“src_端口”:[7],“dst_端口”:[8]}]
@zwer,我试过了,它改变了字典元素的顺序,在字典中是否还有保持相同顺序的方法?@Sweety在pythons 3.6以下的字典中没有隐含顺序。如果你愿意,我建议你使用
collections.OrderedDict
,这样可以保留顺序。我的想法是:
[OrderedDict([(u'src_ports',[7]),(u'dst_ports',[8])]
,但这对我不起作用,因为我需要完全相同格式的字典,只需要删除单引号。@Sweety-你想用字典做什么?要将其作为字符串吗?我需要在进一步的操作中使用此列表和字典:
[{“src_端口”:[7],“dst_端口”:[8]}]