Python 如何从Dict列表转换为Dict?

Python 如何从Dict列表转换为Dict?,python,json,pandas,Python,Json,Pandas,输入数据: val1 = '[{"EmpID":123456,"AnalystID": "8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}]' 预期输出: val_op = {"EmpID":123456,"AnalystID": "8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]} type(val1)isstr 类型(val_op)是dict (基本上,我只需要删

输入数据

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

val_op = {"EmpID":123456,"AnalystID": "8aa18b9c59XXXXXb20cc2534","173f48XXXXXX427f3f14516dd0"]}
type(val1)
is
str

类型(val_op)
dict

(基本上,我只需要删除将
Val1
定义为字符串的第一个和最后一个单引号)

我尝试的方法是:

strlen=len(val1) >>>payloadStr=val1[1:(strlen-1)] “{”EmpID“:123456,“AnalystID”: “8AA18B9C59XXXXKB20CC2534”、“173F48XXXXX427F3F14516DD0”]} >>>导入json >>>json.loads(payloadsStr) {'EmpID':123456,'AnalystID': '8AA18B9C59XXXXKB20CC2534','173F48XXXXX427F3F14516DD0']
澄清一下,这是一个字符串。您希望从字符串中提取列表中包含的词典

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

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

val1 = val1.str.split('[')[1].str.split(']')[0] 
这应该去掉括号,并返回一个索引为1的数组,其中包含字符串形式的词典

另一种更直接的方法是:

val1 = val1.replace('[','').replace(']','') 
从那里

import json
json.loads(payloadsStr)

我应该给你拿字典

您不必单独处理
[]
json.load
可以处理json列表对象

import json
payload = json.loads(val1)[0]
还要注意,字符串中的列表值缺少一个左括号,应该改为

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

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

感谢大家提供的所有解决方案。由于所需的输出需要有双引号,因此不能使用json.load(val1)和dict(*eval(val1))。 我只是尝试替换原始字符串中的[],当作为数据负载传入Post请求时,它运行良好

strlen=len(val1)

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

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

response.text


得到了输出。对任何混乱表示歉意。再次感谢

val_op=dict(*eval(val1))
..感谢您的回复,但这会将双引号转换为单引号。{'EmpID':123456,'AnalystID':'8aa18b9c59XXXXXb20cc2534','173f48xxxxx427f3f14516dd0']}我需要像“EmpID”这样的输出您的
值需要一些修复。它不是一个格式良好的Python dict。Python dict有单引号键,您可以使用
json.dumps(val_op)
。。。这只是返回一个格式化的str,而不是
dict
,实际上这是我们的一个Post请求api所需的json输入格式。为什么不直接执行
lst[0]
?因为字符串上的列表[0]将获得字符串的第一个字符,即首先删除括号的括号,您只需使用json.loads将字符串转换为dict@alex067相反,您应该将字符串视为json负载(因为它是),并首先加载它,然后解析负载
json.loads(payload_string)[0]
还请注意
val1.replace('[','')
可能很糟糕,因为它将用空字符串替换所有
[
。您可以使用
val1.replace('[','',1)
,但如何从右侧执行此操作?您可以改为尝试
val1.strip('['))
这将从字符串两端删除所有的开括号和闭括号。如果有效负载是列表列表,则会产生其他不一致的行为,但在这种情况下有效。