我可以使用正则表达式,但我想知道是否有更好的方法。
例如,一个值可能返回为:
1.) '{"username": "joe.soap", "password": "pass@word123"}'
或
2.) 'https://www.url-example.com'
在 1.) 的情况下,我想将内容转换为实际的字典。我很高兴我知道如何进行转换。我坚持如何识别 1.) 而不是恢复使用正则表达式。
编辑:因为我被问到,这就是我计划进行转换的方式:
import ast
if string_in_question == '{"username": "joe.soap", "password": "pass@word123"}':
return ast.literal_eval(string_in_question)
else:
return valid_command_returns
最佳答案
不要为复杂的正则表达式而烦恼,只需尝试将字符串转换为字典即可。
我假设您正在使用 json.loads
来执行此操作。如果字符串不代表字典,json.loads
将引发异常。
请注意,如果您使用 json.loads
,如果“keys”没有用双引号引起来,转换将失败,即尝试转换字符串 "{'username' : 'joe.soap', 'password': 'pass@word123'}"
到字典也会引发异常。
import json
a = '{"username": "joe.soap", "password": "pass@word123"}'
b = 'https://www.url-example.com'
try:
json.loads(a)
except ValueError:
print("{} is not a dictionary".format(a))
try:
json.loads(b)
except ValueError:
print("{} is not a dictionary".format(b))
这个程序的输出是
https://www.url-example.com 不是字典
更新:
当使用 ast.literal_eval
时,概念是相同的,但您必须捕获 SyntaxError
而不是 ValueError
。请注意,对于 literal_eval
,单引号和双引号都是可以接受的。
import ast
a = '{"username": "joe.soap", "password": "pass@word123"}'
b = "{'username': 'joe.soap', 'password': 'pass@word123'}"
c = 'https://www.url-example.com'
try:
ast.literal_eval(a)
except SyntaxError:
print("{} is not a dictionary".format(a))
try:
ast.literal_eval(b)
except SyntaxError:
print("{} is not a dictionary".format(b))
try:
ast.literal_eval(c)
except SyntaxError:
print("{} is not a dictionary".format(c))
和以前一样,输出是https://www.url-example.com is not a dictionary
。
关于python - 评估字符串是否为字符串化字典的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38990616/