Есть список со мнжеством значений, нужно создать словарь по уникальным значениям
У меня есть список. Кусок из него:
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, это значения.
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Алгоритм будет такой:
- Создать пустой словарь
{} - Идти последовательно по строкам
- Выделять
IDиз строки с помощью регулярного выражения - Если
IDв строке не найден - строка, видимо, пропускается (уточнить этот момент) - Если в словаре нет ключа, равного найденному
ID, то добавляем в словарь элемент с таким ключом и значением пустой список[] - Берём в словаре элемент по
ID(это будет список) и делаем ему.append(строка)
Код думаю сами набросаете, тут ничего сложного.
Автор решения: Stanislav Volodarskiy
→ Ссылка
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