【问题标题】:Nest f-strings deeply in r-strings [duplicate]将 f 弦深深嵌套在 r 弦中 [重复]
【发布时间】:2021-07-04 01:50:24
【问题描述】:

我想将question 的值"How are you?" 传递给body,所以body 的值如下所示。

question = "How are you?"
body = r’{
    "uid": "xxxx’,
    "msg": {
        "msgType": "text",
        "msgBody": {
            "content": "How are you"
        }
    }
}

我尝试用fr 替换r 并将花括号放在里面,但似乎没有用。我这样做的目的是因为我需要对字符串进行哈希处理,以便将哈希处理后的字符串包含在 URL 中。

【问题讨论】:

  • 您是否尝试构建 JSON 字符串?在这种情况下,使用标准库中的 json 模块可能会为您省去一些麻烦。
  • 这些’“”’ 不是有效的引号字符。这是您的代码无法运行的最明显原因。
  • @khelwood 可以在 Python 中按预期打印 body 变量。
  • 好的,但是该示例只是对文字大括号进行转义... OP 描述... 在您说您阅读但没有发现帮助的问题中。
  • “我的实际上是不同的,因为它涉及到 r-string。”这有什么不同?您可以将 any 字符串文字与 f 字符串文字(包括 r 字符串文字)结合使用。 (FWIW,您的示例实际上不需要是 r 字符串。)

标签: python python-3.x


【解决方案1】:

通过使用json 模块和字典,有一种更Pythonic 的方式来实现您想要的。像这样的:

>>> import json
>>> question = 'How are you'
>>> body = {'uid': 'xxx', 'msg': {'msgType': 'text', 'msgbody': {'content': question}}}
>>> json.dumps(body)
'{"uid": "xxx", "msg": {"msgType": "text", "msgbody": {"content": "How are you"}}}'

要删除分隔符后的所有空格,只需将separators 参数传递给json.dumps(),如下所示:

>>> json.dumps(body, separators=(',', ':'))
'{"uid":"xxx","msg":{"msgType":"text","msgbody":{"content":"How are you"}}}'

【讨论】:

  • 感谢您的回复。此方法不会生成与评论部分中提出的相同的散列字符串。 json.dumps() 的乘积留下了几个空格。我尝试删除您初始化 body 的空格,但没有任何改变。
  • 只需将separators=(',', ':') 传递给json.dumps()
  • 我会添加 ensure_ascii=False’ in json.dumps()` 以使其适合我的目的,但谢谢。这应该是最好的解决方案了!
  • 我的荣幸。我很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 2013-07-13
  • 2018-11-17
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多