отправка данных в два элемента списка в python - PullRequest
0 голосов
/ 15 ноября 2018

Python Script:

msg = """
Device: Main1
ID: 1111
status: OK

Device: Main1
ID: 2222
Status: OK

Device: Main2
ID: 3333
status: OK

Device: Main2
ID: 4444
Status: OK
"""
main1_id = []
main2_id = []

for line in msg.split("\n"):
    if  line.startswith("ID:"):
        main1_id.append(line)
print main1_id
print main2_id

У меня есть данные переменных msg.Я хочу добавить идентификаторы этих данных в два разных списка main1_id и main2_id, если устройство - Main1 и Main2 соответственно.Я попытался реализовать это в приведенном выше коде.Я застрял, и мне нужна помощь.

вывод:

['ID: 1111', 'ID: 2222', 'ID: 3333', 'ID: 4444']
[]

Ожидаемый вывод:

['ID: 1111', 'ID: 2222']
['ID: 3333', 'ID: 4444']

Ответы [ 2 ]

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

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

import collections 
ids = collections.defualtdict(list)
line_regex = r"(\w*): *(\w*)"

for line in input.split():

    if not line.strip(): 
        continue

    key, value = re.match(line_regex, line).groups()
    if key == 'Device':
        cur_device = value
    if key == 'ID' and cur_device is not None:
        ids[cur_device].append(value)
        cur_device = None
    if key == 'ID' and cur_device is None:
        raise SyntaxError('Could not parse input')
0 голосов
/ 15 ноября 2018

Использовать словарь

Следует избегать создания таким образом переменного числа переменных.Здесь вы можете использовать collections.defaultdict:

from collections import defaultdict

dd = defaultdict(list)
L = msg.split('\n')

for idx, line in enumerate(L):
    if line.startswith('Device'):
        dd[line.split(': ')[-1]].append(int(L[idx+1].split(': ')[-1]))

Результат:

defaultdict(list, {'Main1': [1111, 2222],
                   'Main2': [3333, 4444]})

Затем получить доступ к своим спискам через dd['Main1'] и dd['Main2'].

...