我有一个字典列表,它正在用来自另一个列表的数据动态填充。然后,这个字典列表被用作请求中的主体参数。字典列表必须是字符串,请求才能成功。
问题是,当我动态填充字典列表str(list_of_dicts)时,它在字符串对象周围加上双引号,并在其中的所有内容周围加上单引号。我需要它正好相反,用双引号包装字符串和单引号在所有里面。
我尝试过替换,str, repr, join和json。转储到目前为止还没有用。
def insert_header(self, request):
pid = request.meta['pid']
pa = request.meta['pa']
url = request.url
pid = [x.split('ern:product::')[-1] for x in pid]
body = [
{"id":"1234567","variables":{"id":"ern:product::pid"}},
{"id":"1234567","variables":{"id":"ern:product::pid"}},
{"id":"1234567","variables":{"id":"ern:product::pid"}}
]
if len(pid) == len(body):
for counter, i in enumerate(body):
i["variables"] = {"id":"ern:product::" + pid[counter]}
body = str(body)
body.replace("'", '"')
return Request(url, method='POST', meta=request.meta, body=body, callback=self.check_header, **self.parse_page_kwargs)
真正令人沮丧的是,在python shell中,我可以复制失败的字典列表(引号错误的列表)并执行:list_of_dicts.replace("'", '"'),它返回的正是我需要的,当我运行代码时,它只是没有像那样改变。谢谢你的建议。
我认为你应该去掉body = body[1:-1]
这一行。
str(body)
在开头和结尾没有引号。因此,您正在删除部分实际数据。
您也可以使用body = json.dumps(body)
,无需进一步更换。
用print(body)
查看str
的实际含量。它应该看起来像:
[{"id": "1234567", "variables": {"id": "ern:product::pid"}}, {"id": "1234567", "variables": {"id": "ern:product::pid"}}, {"id": "1234567", "variables": {"id": "ern:product::pid"}}]