怎么把Dict List转换成Dict?

时间:2019-08-29 21:52:01

标签: python json pandas

输入数据

val1 = '[{"EmpID":123456,"AnalystID": "8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}]'

预期输出:

val_op = {"EmpID":123456,"AnalystID": "8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}

type(val1)str
type(val_op)dict
(基本上,我只需要删除将Val1定义为String的第一个和最后一个单引号)。

我尝试的方法:

>>> strlen = len(val1)
>>> payloadStr = val1[1:(strlen-1)]

'{"EmpID":123456,"AnalystID": 
"8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}'

>>> import json
>>>json.loads(payloadsStr)

{'EmpID':123456,'AnalystID': 
'8aa18b9c59XXXXXb20cc2534','173f48XXXXXX427f3f14516dd0']}

3 个答案:

答案 0 :(得分:2)

您不必分别对待[]json.loads可以处理json列表对象。

import json
payload = json.loads(val1)[0]

还请注意,您字符串中的列表值缺少左括号,应改为...

val1 = '[{"EmpID":123456,"AnalystID": ["8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}]'
#                                     ^

由于您提到该字符串来自Web请求,因此这意味着提出该请求的人都将其json格式错误。

答案 1 :(得分:0)

澄清一下,这是一个字符串。您要从字符串中提取一个包含在列表中的字典。

与包含字典的简单列表相比,这更加困难。

您可以采取的一种方法是:

val1 = val1.str.split('[')[1].str.split(']')[0] 

这应该除去括号,并返回一个包含1个索引的数组,该数组将您的字典包含在字符串中。

另一种更直接的方法是:

val1 = val1.replace('[','').replace(']','') 

从那里

import json
json.loads(payloadsStr)

应该为您提供字典。

答案 2 :(得分:-1)

谢谢大家提供的所有解决方案。由于所需的输出需要用双引号引起,因此不能使用json.loads(val1)和dict(* eval(val1))。 我只是尝试替换原始字符串中的[],并在将Post Request作为数据有效载荷传递时,它工作正常。

strlen = len(val1)

payloadStr = val1 [1:(strlen-1)]

response = requests.request(“ POST”,url,verify = False,data = payloadsStr,headers = header)

response.text

得到输出。如有任何混淆,我们深表歉意。再次感谢

相关问题