我有一个包含字典的列表,其中可能包含其他列表和/或字典,例如
a = [{3:4},{1:2}, {5:[5,6,7,7]} ]
我想创建这个对象的哈希和(或等效的东西),以便将它与另一个哈希进行比较,当列表的内容不同时,它是不同的。
我需要这个来通过网络进行查询。我不是一直在网络上拉出可能非常大的列表,而是得到哈希和,只有当这个总和与之前的哈希和不同时,我才能通过网络获得整个列表。
有没有一些简单的方法可以做到这一点?
我有一个包含字典的列表,其中可能包含其他列表和/或字典,例如
a = [{3:4},{1:2}, {5:[5,6,7,7]} ]
我想创建这个对象的哈希和(或等效的东西),以便将它与另一个哈希进行比较,当列表的内容不同时,它是不同的。
我需要这个来通过网络进行查询。我不是一直在网络上拉出可能非常大的列表,而是得到哈希和,只有当这个总和与之前的哈希和不同时,我才能通过网络获得整个列表。
有没有一些简单的方法可以做到这一点?
你可以用泡菜
hashlib.md5(pickle.dumps(a[0])).hexdigest()
str 并不总是给出预期的结果
如何做类似的事情:
# imports
import copy
def make_hash(x):
# Check if arg is a list, tuple or set
if isinstance(x, (set, tuple, list)):
return tuple([make_hash(y) for y in x])
# Check if arg is not a dict
elif not isinstance(x, dict):
return hash(x)
new = copy.deepcopy(x)
for k,v in new.items():
new[k] = make_hash(v)
return hash(tuple(frozenset(new.items())))
然后你可以简单地做make_hash([{...},{...}])
a = [{3:4},{1:2}, {5:[5,6,7,7]} ]
hash(str(a))