【发布时间】:2018-01-18 22:01:18
【问题描述】:
这是一个具体的例子:
my_dict={k:int(encoded_value)
for (k,encoded_value) in
[encoded_key_value.split('=') for encoded_key_value in
many_encoded_key_values.split(',')]}
问题是关于内部列表[],可以避免吗,例如:
# This will not parse
my_dict={k:int(encoded_value)
for (k,encoded_value) in
encoded_key_value.split('=') for encoded_key_value in
many_encoded_key_values.split(',')}
...,这是无效的语法:
NameError: name 'encoded_key_value' is not defined
样本数据:aa=1,bb=2,cc=3,dd=4,ee=-5
【问题讨论】:
-
对于这个特定的示例,甚至来自
ast的literal_eval可能对某些文本操作有所帮助。 -
@Ev.Kounis,我也试过
result = ast.literal_eval('dict('+many_encoded_key_values+')')。但我很好奇,它不起作用:... raise ValueError('malformed node or string: ' + repr(node)) -
@RomanPerekhrest 我试过
res = ast.literal_eval('{"' + many_encoded_key_values.replace('=', '":').replace(',', ',"') + '}'),但它看起来太丑了,无法发布。 -
哇,一些严重的案例特定的解析黑客,有:)
-
@MichaelGoldshteyn 脖子上的疼痛引用了
abcs。但是@Roman 有一个非常有效的观点。为什么他的literal_eval不起作用?。
标签: python python-3.x python-3.6