stringExp = "2^4"
intVal = int(stringExp) # Expected value: 16
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int()
with base 10: '2^4'
Run Code Online (Sandbox Code Playgroud)
我知道eval可以解决这个问题,但是不是有更好的 - 更重要的 - 更安全的方法来评估存储在字符串中的数学表达式吗?
我知道有许多关于解析逗号分隔值的其他帖子,但我找不到分割键值对并处理引用逗号的帖子.
我有这样的字符串:
age=12,name=bob,hobbies="games,reading",phrase="I'm cool!"
Run Code Online (Sandbox Code Playgroud)
我希望得到这个:
{
'age': '12',
'name': 'bob',
'hobbies': 'games,reading',
'phrase': "I'm cool!",
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用shlex这样的:
lexer = shlex.shlex('''age=12,name=bob,hobbies="games,reading",phrase="I'm cool!"''')
lexer.whitespace_split = True
lexer.whitespace = ','
props = dict(pair.split('=', 1) for pair in lexer)
Run Code Online (Sandbox Code Playgroud)
麻烦的是shlex将hobbies条目分成两个标记,即hobbies="games和reading".有没有办法让双引号考虑在内?或者我可以使用另一个模块吗?
编辑:修正了拼写错误 whitespace_split
编辑2:我不喜欢使用shlex.正则表达式也很好,但我不知道如何处理匹配的引号.
我需要将逗号分隔的字符串与由冒号分隔的键值对转换为字典,其中值应该是浮点数.我能够做到这一点来得到一个字典:
>>> s = 'us:0.9,can:1.2,mex:0.45'
>>> dict(x.split(':') for x in s.split(','))
Run Code Online (Sandbox Code Playgroud)
这导致:
{'us': '0.9', 'can': '1.2', 'mex': '0.45'}
Run Code Online (Sandbox Code Playgroud)
但不知道如何强制该值不是一个字符串,即我期待这个:
{'us': 0.9, 'can': 1.2, 'mex': 0.45}
Run Code Online (Sandbox Code Playgroud)
如何强制值浮动?
谢谢!
从字符串开始:
S='a=65 b=66 c=67'
Run Code Online (Sandbox Code Playgroud)
你会如何创建一个类似于dict的输出 {'a':'65','b':'66','c':'67'}
尝试:
S='a=65 b=66 c=67'
L=s.split(' ')
D=dict()
A=''
i=0
While i<Len(L):
A=L[i].split('=')
D[a[i]]=a[i+1]
i+2
print (D)
Run Code Online (Sandbox Code Playgroud)
第8行indexerror列表索引超出范围时出错