【发布时间】: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