一个月前才开始学习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循环的变量名,而不是值。这有可能吗?任何其他清理代码的建议和技巧也将不胜感激。谢谢!
答案 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(' ')))