Для анализа петли с% - PullRequest
       4

Для анализа петли с%

0 голосов
/ 25 ноября 2018

Только начал изучать 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 голосов
/ 25 ноября 2018

Для этого вам не нужны петли, и я бы не стал втискивать их в одну строку.Вот простая функция, которая должна делать то, что вы хотите.

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'}
0 голосов
/ 25 ноября 2018

Обычно это плохая идея, но можно сделать с помощью другого 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(' ')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...