Проблема: Посмотрите, где вы добавляете новые элементы в ваш line_number
словарь:
if x1 in line_number : # if ip address on line
line_number[x1].append((log_year + ":" + log_day + ":" + log_time))
else:
line_number[x1] = [(index,log_time)]
Если в словаре не содержится IP-адрес (т.е. выполняется часть else
), вы создаете поле IP со словарем, содержащим список с элементом (index,log_time)
, который кортеж с двумя элементами.
После этого, если IP-адрес уже содержится (выполняется часть if
), вы добавляете только (log_year + ":" + log_day + ":" + log_time)
, то есть строку log_year + ":" + log_day + ":" + log_time
. Это потому, что (elem)
в Python распаковывается в elem
. Если вы хотите создать кортеж, содержащий один элемент, вы должны написать (elem,)
.
Учитывая это, кажется, что каждое значение в вашем line_number
словаре будет выглядеть примерно так (отметьте это!):
[(1, '18:45:00'), "2018:8:18:45:00", "2018:8:18:45:00", "2018:8:18:45:00" ... ]
Исправление: изменение [(index,log_time)]
в приведенном выше отрывке на [(log_year + ":" + log_day + ":" + log_time)]
должно решить вашу проблему. Это плохой стиль кодирования, потому что вы пишете одно и то же дважды. Лучшим решением было бы заменить приведенный выше код следующей строкой:
line_number[x1] = line_number.get(x1, []) + [f"{log_year}:{log_day}:{log_time}"]