评估字符串是字符串化字典还是字符串化字典的最佳方法是什么

2024-06-16 14:02:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以用正则表达式,但不知道有没有更好的方法。你知道吗

例如,值可能返回为:

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(str‌​ing_in_question)
else:
    return valid_command_return‌​s

Tags: 方法inhttpsurlreturnexamplewwwusername
1条回答
网友
1楼 · 发布于 2024-06-16 14:02:27

不必为复杂的正则表达式操心,只需尝试将字符串转换为字典即可。你知道吗

我假设您正在使用json.loads来完成它。如果字符串不表示字典json.loads将引发异常。你知道吗

请注意,如果使用json.loads,如果“键”没有用双引号括起来,则转换将失败,即尝试将字符串"{'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 is not a dictionary

更新

当使用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。你知道吗

相关问题 更多 >