Wie generiere ich einen eindeutigen Hash für gleiche Wörterbücher?

8

zB:

%Vor%

Was ist eine gute Hash-Funktion, um gleiche Hashes für beide Dicts zu generieren? Die Wörterbücher werden haben grundlegende Datentypen wie int, list, dict und strings, keine anderen Objekte.

Es wäre großartig, wenn der Hash-Wert platzoptimiert ist, die Zielmenge etwa 5 Millionen Objekte ist, daher sind die Kollisionschancen ziemlich gering.

Ich bin mir nicht sicher, ob json.dumps oder andere Serialisierungen der Gleichheit statt der Struktur der Mitglieder im Wörterbuch gerecht werden. z.B. Grundlegendes Hashing mit str of dict funktioniert nicht:

%Vor%

json.dumps funktioniert auch nicht:

%Vor%     
DhruvPathak 24.05.2013, 13:11
quelle

4 Antworten

11

Das pprint-Modul sortiert die Diktatschlüssel

%Vor%

Wenn Sie die Hashes beibehalten möchten, sollten Sie einen Hash von hashlib verwenden. sha1 ist viel

    
John La Rooy 24.05.2013, 13:21
quelle
1

Warum sortieren Sie nicht vor dem Hashing? Sicher, es kann eine nicht vernachlässigbare Zeit erfordern, um dies zu tun, aber zumindest kann man weiterhin eine "gute" Hash-Funktion verwenden, d. H. Eine, die eine gute Dispersion plus alle anderen gewünschten Eigenschaften zeigt. Wenn die Idee ist, Platz zu sparen, liegt es wahrscheinlich daran, dass Sie viele Einträge im Wörterbuch erwarten. Daher wird die Zeit, die durch das Sortieren der Menge bei der Verwendung einer "guten" Hash-Funktion gespart wird, bestimmt durch die Suchzeit bei Verwendung von "schlechte" Hash-Funktion als Folge einer hohen Anzahl von Kollisionen.

    
João Fernandes 24.05.2013 13:35
quelle
0

Nicht sicher, ob dies das ist, was Sie wollen:

%Vor%     
user1907906 24.05.2013 13:13
quelle
0

Sie können auch einen Hash der sortierten Zeichenfolge machen:

%Vor%     
dawg 24.05.2013 14:39
quelle

Tags und Links