Seite 1 von 1
Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 21:00
von darktrym
Hallo,
ich habe eine Liste von Tupeln die Ganzzahlen enthält, diese soll als Input für
hashlib.update dienen, der will bekanntlich aber nur Strings.
Wie löse ich das am besten?
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 21:05
von zizou2981
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 21:10
von sparrow
Ich bin mir nicht sicher ob du das meinst, aber:
Code: Alles auswählen
>>> a
(10, 20, 30, 40)
>>> "".join(str(b) for b in a)
'10203040'
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 21:19
von darktrym
Verwendbar wäre das, aber nicht unbedingt elegant.
Zum meinem Verwendungszweck:
Ich habe Bilder gegeben deren Daten als RGB-Tupel-Liste vorliegen und ich will die Hashwerte in einem Dictionary ablegen um Duplikate herauszufiltern. Zum. sieht so der naive Ansatz aus.
Wäre also sicher ganz angebracht, wenn die zu hashende Datenmenge nicht noch zus. wachsen würde.
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 21:30
von lunar
@darktrym: Suchst Du dann nicht einfach folgendes?
Code: Alles auswählen
>>> rgbs = [(255,0,0),(255,0,0)]
>>> list(set(rgbs))
[(255, 0, 0)]
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 21:46
von darktrym
Bin wohl geistig nicht mehr ganz so frisch. Ich denke mir würde eine Lösung wie eine verschachtelte Schleife, bei den ich die einzelnen Tupelwerte in Strings umwandeln und an update übergebe als Einzeiler genügen.
So, ich geh' jetzt Schafe zählen.
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 21:50
von Dav1d
Du willst also zwei Bilder vergleichen (um duplikate zu finden), die in diesem Format vorliegen?:
Wieso vergleichst du nicht einfach die Listen direkt miteinander? `image_one == image_two`
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 22:03
von EyDu
Dav1d hat geschrieben:Wieso vergleichst du nicht einfach die Listen direkt miteinander? `image_one == image_two`
Weil das unglaublich langsam ist, wenn man eine genügend große Anzahl von Bildern hat, welche man alle paarweise miteinander vergleichen möchte. Wenn man nur die Hashwerte überprüft fällt hingegen fast gar keine Rechenzeit an.
Zum Hashwert an sich: Vielleicht reicht auch ein Umwandeln deiner Liste in ein Tupel, dann hast du die built-in-hash-Funktion zur Verfügung:
Wenn ich mich richtig erinnere, dann sollte man den so erzeugten Hashwert jedoch nicht abspeichern, da dieser sich von Pythonversion zu Version unterscheiden kann. Vielleicht liege ich aber auch falsch und jemand möge mich korrigieren.
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 22:05
von Dav1d
EyDu hat geschrieben:Weil das unglaublich langsam ist, wenn man eine genügend große Anzahl von Bildern hat, welche man alle paarweise miteinander vergleichen möchte. Wenn man nur die Hashwerte überprüft fällt hingegen fast gar keine Rechenzeit an.
Stimmt, ich ging von einmaligem vergleichen aus.
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Mittwoch 18. Juli 2012, 22:10
von DasIch
EyDu hat geschrieben:Wenn ich mich richtig erinnere, dann sollte man den so erzeugten Hashwert jedoch nicht abspeichern, da dieser sich von Pythonversion zu Version unterscheiden kann. Vielleicht liege ich aber auch falsch und jemand möge mich korrigieren.
Der könnte sich auch schon zwischen Interpreter Sessions ändern um (D)DOS Attacken über Hash Kollisionen zu vermeiden.
Re: Listen von Tupeln als Input für hashlib.update
Verfasst: Donnerstag 19. Juli 2012, 00:37
von jerch
Wenn alles Gesagte ein Problem darstellt, wie wärs mit einer eigenen Hashfunktion über die RGBA-Werte?
Ist zugegeben ein Schnellschuss, vllt. aber mit einigen Anpassungen interpreter- und sessionübergreifend nutzbar.