Как объединить два ссылочных списка с Python
У меня есть глупые данные, поступающие из системы, они должны быть сведены.
Основной CSV имеет следующие столбцы: имя хоста, имя программы, имя версии
Однако для каждого хоста существует только одна строка, поэтому последние два поля выглядят так:
содержание имя_программы:
Word
Excel
Cognos
Mozilla
содержимое версии (не реально, только для иллюстрации):
2.3.2
121.3.0
build 22
Каков наилучший способ убедиться, что все совпадает, и сделать это более лаконично и питонически?
Вот как выглядит настоящий код, приведенный выше в основном для демонстрационных целей:
for row in tan_output.programs:
names = row["Name"].splitlines()
versions = row["Version"].splitlines()
if(len(names) != len(versions)):
print("NAME and VERSION from tan_programs are not equal... Exiting")
exit()
else:
for name in names:
#tan_programs.append({"Count": row["Count"], "Hostname": row["Hostname"], "Name": row["Name"], "Version": row["Version"]})
Я застрял внизу для цикла, потому что я чувствую, что должен циклировать по обоим спискам одновременно, а не по одному, а затем, что я собирался сделать, использовать счетчик для ссылки на второй и сформировать сглаженные данные.
PS, файл 7 гигабайт... так что чем эффективнее, тем лучше, например, если мне нужно использовать счетчик, я знаю из опыта, что i += 1 в 100 раз эффективнее, чем i = i + 1
1 ответ
Просто используйте Счетчик... если у кого-то нет лучшей идеи:
tan_programs = []
for row in tan_output.programs:
names = row["Name"].splitlines()
versions = row["Version"].splitlines()
if(len(names) != len(versions)):
print("NAME and VERSION from tan_programs are not equal... Exiting")
exit()
else:
i = 0
for name in names:
tan_programs.append({"Hostname": row["Hostname"], "Name": name, "Version": versions[i]})
i += 1
Это на самом деле очень быстро... медленная часть вставляет 8 миллионов записей в БД на другом сервере по сети.