Есть список со мнжеством значений, нужно создать словарь по уникальным значениям

Рейтинг: -1Ответов: 2Опубликовано: 15.03.2023

У меня есть список. Кусок из него:

Timestamp: 1675240149.800284    ID: 00002000    X Rx                DL:  3    0f 00 66 66 66 0b 3f 8c     Channel: can0
Timestamp: 1675240149.802410    ID: 00002001    X Rx                DL:  8    05 7a 02 88 05 84 05 7f     Channel: can0
Timestamp: 1675240149.804286    ID: 00002004    X Rx                DL:  8    80 00 00 2a 00 00 00 00     Channel: can0
 00 00 00 00     Channel: can0
Timestamp: 1675240149.859962    ID: 00003005    X Rx                DL:  8    0b 1e 05 16 14 0a 00 00     Channel: can0
Timestamp: 1675240149.896405    ID: 00002000    X Rx                DL:  8    0f 00 66 66 66 0b 3f 8a     Channel: can0
Timestamp: 1675240149.898284    ID: 00002001    X Rx                DL:  8    05 d2 02 86 05 d0 05 d7     Channel: can0
Timestamp: 1675240149.906460    ID: 00002004    X Rx                DL:  8    80 00 00 2a 00 00 00 00     Channel: can0

В данном списке повторяются значения id. Как по уникальным id составить словарь, в котором значения id - это ключи, а все остальные строки, содержащие этот же уникальный id, это значения.

Ответы

▲ 1

Алгоритм будет такой:

  1. Создать пустой словарь {}
  2. Идти последовательно по строкам
  3. Выделять ID из строки с помощью регулярного выражения
  4. Если ID в строке не найден - строка, видимо, пропускается (уточнить этот момент)
  5. Если в словаре нет ключа, равного найденному ID, то добавляем в словарь элемент с таким ключом и значением пустой список []
  6. Берём в словаре элемент по ID (это будет список) и делаем ему .append(строка)

Код думаю сами набросаете, тут ничего сложного.

▲ 0
data = '''
Timestamp: 1675240149.800284    ID: 00002000    X Rx                DL:  3    0f 00 66 66 66 0b 3f 8c     Channel: can0
Timestamp: 1675240149.802410    ID: 00002001    X Rx                DL:  8    05 7a 02 88 05 84 05 7f     Channel: can0
Timestamp: 1675240149.804286    ID: 00002004    X Rx                DL:  8    80 00 00 2a 00 00 00 00     Channel: can0
Timestamp: 1675240149.859962    ID: 00003005    X Rx                DL:  8    0b 1e 05 16 14 0a 00 00     Channel: can0
Timestamp: 1675240149.896405    ID: 00002000    X Rx                DL:  8    0f 00 66 66 66 0b 3f 8a     Channel: can0
Timestamp: 1675240149.898284    ID: 00002001    X Rx                DL:  8    05 d2 02 86 05 d0 05 d7     Channel: can0
Timestamp: 1675240149.906460    ID: 00002004    X Rx                DL:  8    80 00 00 2a 00 00 00 00     Channel: can0
'''.strip().split('\n')

d = {}
for line in data:
    id_ = line.split()[3]
    d.setdefault(id_, []).append(line)

for k, v in d.items():
    print('', k, *v, sep='\n')
00002000
Timestamp: 1675240149.800284    ID: 00002000    X Rx                DL:  3    0f 00 66 66 66 0b 3f 8c     Channel: can0
Timestamp: 1675240149.896405    ID: 00002000    X Rx                DL:  8    0f 00 66 66 66 0b 3f 8a     Channel: can0

00002001
Timestamp: 1675240149.802410    ID: 00002001    X Rx                DL:  8    05 7a 02 88 05 84 05 7f     Channel: can0
Timestamp: 1675240149.898284    ID: 00002001    X Rx                DL:  8    05 d2 02 86 05 d0 05 d7     Channel: can0

00002004
Timestamp: 1675240149.804286    ID: 00002004    X Rx                DL:  8    80 00 00 2a 00 00 00 00     Channel: can0
Timestamp: 1675240149.906460    ID: 00002004    X Rx                DL:  8    80 00 00 2a 00 00 00 00     Channel: can0

00003005
Timestamp: 1675240149.859962    ID: 00003005    X Rx                DL:  8    0b 1e 05 16 14 0a 00 00     Channel: can0