Это означает, кортеж (поле1, поле2, field3, Field4) должен быть ключ и значение в то же самое время. Возможна ли такая реализация в python?
Да. Там ничто не мешает вам делать так:
key = ("f1", "f2", "f3", "f4", "f5")
value = ("f1", "f2", "f3", "f4", "f5")
d = {key: value}
Если я вас правильно понимаю, вы делаете что-то вроде этого до сих пор:
line_no = 1
d = {}
for line in open(FILE):
d[line_no] = line # line = ("f1", "f2", "f3", "f4")
line_no += 1
..?
Если нет, то просьба уточнить, где я неправильно или опубликовать исходный код :)
EDIT:
Хорошо, спасибо за комментарий, я думаю, теперь я понимаю. Я хотел бы сделать это следующим образом:
d = {}
for line in open(FILE):
d[line] = []
d[line].append(f5) # line = ("f1", "f2", "f3", "f4"), f5 = timestamp
Таким образом, вы будете использовать весь кортеж в качестве ключа и может вычитать метки времени (f5) из записей с одинаковыми f1, f2, f3, f4. Для меня это гораздо проще делать в SQL.
Таким образом, при увеличении нагрузки у вас будет постоянное время поиска и линейное время. Но я думаю, что вы понесете некоторое количество ударов по производительности, если ключ имеет нетривиальный размер.
Позвольте мне думать о том, как бы вы suctract метки времени друг от друга ..
EDIT2:
Да, вы можете составить список первого элемента в паре: П = [р [ 0] для р в парах]], а затем отфильтровать любой с более чем 1 вхождением:
что-то вроде этого l2 = [л для л в е, если Len (л)> 1]
но это Безразлично» t кажется очень эффективным ..
Я смущен. Вы хотите, чтобы вы группировали строки на 'field5' и имели словарь словарей (как в вашем названии), или строки этого файла уже уникальны, и вы просто хотите, чтобы' field5' являлся ключом вместо номера строки (как в «включить ... как значение в ключ»)? –
Кортежи могут быть ключами, но вам нужны другие поля как часть ключа? Если поле 5 уникально, можете ли вы использовать его в качестве ключа? (Если вы использовали номера строк в качестве ключей, то не был бы список проще?) – cdarke
Я делаю кортеж (поле1, поле2, поле3, поле4) как значение и номер строки в качестве ключа. В основном, что я делаю, если ключи line1 и line2 имеют одинаковые значения, я удаляю обе записи из словаря. В качестве новой реализации, перед удалением записей, я хочу принять значение значений поля 5, которые являются отметками времени. – newbie555