【问题标题】:How to escape quotes from string variable while updating dictionary如何在更新字典时从字符串变量中转义引号
【发布时间】:2019-10-20 07:52:19
【问题描述】:

我正在尝试使用新的键值对更新现有字典。但是更新字典将单引号添加到值字段。 该字典用于 mongo 查询,因此每当我替换 dictionay.update(key:value) 中的 value 变量时都需要清除额外的引号

我尝试使用 eval 和 json.loads。但这并不富有成效。请有任何建议。

mquery ={"type" : "search"}

skey = "ZXCV,YBC"

skey = '{"$in": [/' + skey.replace(',','/,/') + '/]}'

print(skey)

if skey is not None : mquery.update({"skey1" : skey})

print(mquery)

预期 - {'type': 'search', 'skey1': {"$in": [/ZXCV/,/YBC/]}}

当前 - {'type': 'search', 'skey1': '{"$in": [/ZXCV/,/YBC/]}'}

【问题讨论】:

  • 事实上期望输出在这部分是无效的字典[/ZXCV/,/YBC/]
  • 如果您希望值是dict,为什么要首先将skey 设为字符串?您的预期字典甚至无效:您想要 '[/ZXCV/,/YBC/]' 还是 ['/ZXCV/', '/YBC/'] 代替?
  • 此打印输出中的单引号 '{"$in": [/ZXCV/,/YBC/]}' 不是字符串的一部分。它们是 python 在字典中显示字符串时显示的一部分。如果您要执行print(mquery['skey1']),那么显示的值将是{"$in": [/ZXCV/,/YBC/]}。如果将此值传递给 mongo 查询,它将没有引号。引号只是为了使显示更易于阅读。
  • 这是用于查询 MongoDB **db.qu1.find({'type': 'search', 'skey1': {"$in": [/ZXCV/,/YBC/ ]}} ** 但是我得到的输出(带有附加引号)查询无法运行。
  • 您将对象的表示与它的值混淆了。大多数 python 容器,包括字典,将显示它包含的对象的表示(又名 repr)。字符串用引号括起来表示。但这是导入部分!那些周围的引号不是字符串值的一部分。为了证明这一点,请尝试 print(mquery['skey1'][0]) ,您会发现输出是 { 而不是 ' 如果引号是字符串的一部分,您会期望。

标签: python json dictionary pymongo


【解决方案1】:

重新导入

db.qu1.find({'type': 'search', 'skey1': {'$in': [re.compile('.ZXCV.|.YBC .')]}}

这就是 RE 的答案。

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2012-11-03
    • 2023-02-26
    • 2023-04-02
    相关资源
    最近更新 更多