Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解析字符串值并加载到字典中_Python_Python 3.x_Python 2.7 - Fatal编程技术网

Python解析字符串值并加载到字典中

Python解析字符串值并加载到字典中,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我需要解析一个字符串值并加载到python字典中 输入: attributes = "LIFETIME=203421,ID=acr44,SCOPE=[open,basic.operation:read,common.operation:write],USER=b611-410e,CLAIMS_" 预期产出: attributesDictionary = { "LIFETIME" : "203421",

我需要解析一个字符串值并加载到python字典中

输入:

attributes = "LIFETIME=203421,ID=acr44,SCOPE=[open,basic.operation:read,common.operation:write],USER=b611-410e,CLAIMS_"
预期产出:

attributesDictionary = { "LIFETIME" : "203421",
                         "ID" : "acr44",
                         "SCOPE" : "[open,basic.operation:read,common.operation:write]",
                         "USER" : "b611-410e",
                         "CLAIMS_" : None
                         }

attributesDictionary["ID"]
>>> 'acr44'

attributesDictionary["SCOPE"]
>>> '[open,basic.operation:read,common.operation:write]'

我是python编程新手。我们怎样才能做到这一点呢?

不确定,但在这里我观察到一种模式,所有的键都是大写字母。 如果是这样,您可以执行以下操作:

import re

attributes = "LIFETIME=203421,ID=acr44,SCOPE=[open,basic.operation:read,common.operation:write],USER=b611-410e,CLAIMS_"

keys = re.findall("[A-Z]+", attributes)
values = re.findall("[^A-Z=]+,", attributes)
attributesDictionary = dict(zip(keys,values))
这将为您提供以下输出

{'LIFETIME': '203421',
 'ID': 'acr44',
 'SCOPE': '[open,basic.operation:read,common.operation:write]',
 'USER': 'b611-410e',
 'CLAIMS': '_'}

不确定,但在这里我观察到一种模式,所有的钥匙都是大写字母。 如果是这样,您可以执行以下操作:

import re

attributes = "LIFETIME=203421,ID=acr44,SCOPE=[open,basic.operation:read,common.operation:write],USER=b611-410e,CLAIMS_"

keys = re.findall("[A-Z]+", attributes)
values = re.findall("[^A-Z=]+,", attributes)
attributesDictionary = dict(zip(keys,values))
这将为您提供以下输出

{'LIFETIME': '203421',
 'ID': 'acr44',
 'SCOPE': '[open,basic.operation:read,common.operation:write]',
 'USER': 'b611-410e',
 'CLAIMS': '_'}
使用re.split的一种方法:

输出:

{'CLAIMS_': None,
 'ID': 'acr44',
 'LIFETIME': '203421',
 'SCOPE': '[open,basic.operation:read,common.operation:write]',
 'USER': 'b611-410e'}
使用re.split的一种方法:

输出:

{'CLAIMS_': None,
 'ID': 'acr44',
 'LIFETIME': '203421',
 'SCOPE': '[open,basic.operation:read,common.operation:write]',
 'USER': 'b611-410e'}

到目前为止,您尝试了什么?尝试使用python正则表达式识别由“=”分隔的键值对。但它并不适用于所有场景。请展示您尝试的确切代码,以及一个不起作用的示例场景?如果您创建源代码行,请将其保存到json,然后从json读取。@Evg我没有创建源代码行,它是来自网关的字符串值。到目前为止您尝试了什么?尝试使用python正则表达式来标识由“=”分隔的键值对。但它并不适用于所有场景。请显示您尝试的确切代码,以及一个不起作用的示例场景?如果您创建源代码行,请将其保存到json,然后从json读取。@Evg我不是在创建源代码行,它是来自网关的字符串值。您能解释一下这个正则表达式吗?![^[]*]@RaAm。它正在寻找,分裂,但如果不是,即负前瞻?!它在一个以[,和任何*开头的部分中,直到]。你能给我解释一下这个正则表达式吗?![^[]*]@RaAm。它正在寻找,分裂,但如果不是,即负前瞻?!它位于以[,以及任何*开头的部分中,直到]。