对于具有%的循环解析

时间:2018-11-25 08:22:30

标签: python parsing

一个月前才开始学习Python。我陷入一个问题。 尝试使用for循环更新字典。我想使用for循环的变量名称作为键并将变量值作为字典的值来存储变量。我正在尝试使用%使其成为一个衬板。这是我到目前为止的内容:

grbl_parser_d = {
'a': 'null',  # Motion Mode
'b': 'null',  # Coordinate System Select
'c': 'null'  # Plane Select
}

grbl_out = [GC:G0 G54 G17]

def filtergrblparser():
    global grbl_parser_d
    for l, r in [grbl_out.strip('[]').split(':')]:
        for a, b, c in [r.split(' ')]:
            # grbl_parser_d.update({'%': x}) % x
            grbl_parser_d.update({'a': a})
            grbl_parser_d.update({'b': b})
            grbl_parser_d.update({'c': c})

'grbl_out'变量是Arduino的输出。

尝试使用类似这样的东西:grbl_parser_d.update({'%':a})%a.name

'a.name'将是for循环的变量名,而不是值。这有可能吗?任何其他清理代码的建议和技巧也将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

您不需要为此循环,并且我不会尝试将其塞入一行。这是一个简单的函数,可以执行您想要的操作。

def filtergrblparser(grbl_out):
    l, r = grbl_out.strip('[]').split(':')
    a, b, c = r.split(' ')
    grbl_parser_d = {
        'a': a,  # Motion Mode
        'b': b,  # Coordinate System Select
        'c': c  # Plane Select
    }
    return grbl_parser_d

# I'm assuming you meant this to be a string
grbl_out = "[GC:G0 G54 G17]"

grbl_parser_d = filtergrblparser(grbl_out)

print(grbl_parser_d)
# {'a': 'G0', 'b': 'G54', 'c': 'G17'}

答案 1 :(得分:0)

这通常是个坏主意,但它可以 通过另一个for循环来完成。

# it's not clear why you're throwing this in a list just to iterate once over it
l, r = grbl_out.strip('[]').split(':')
a, b, c = r.split(' ')
for k in ['a', 'b', 'c']:
    grbl_parser_d[k] = vars()[k]

但是实际上看起来您正在尝试:

grbl_parser_d = dict(zip('abc', grbl_out.strip('[]').split(':')[1].split(' ')))

其中最好写为:

l, r = grbl_out.strip('[]').split(':')
grbl_parser_d = dict(zip('abc', r.split(' ')))