2

我有一个包含字典的列表,其中可能包含其他列表和/或字典,例如

a =  [{3:4},{1:2}, {5:[5,6,7,7]} ]

我想创建这个对象的哈希和(或等效的东西),以便将它与另一个哈希进行比较,当列表的内容不同时,它是不同的。

我需要这个来通过网络进行查询。我不是一直在网络上拉出可能非常大的列表,而是得到哈希和,只有当这个总和与之前的哈希和不同时,我才能通过网络获得整个列表。

有没有一些简单的方法可以做到这一点?

4

3 回答 3

2

你可以用泡菜

hashlib.md5(pickle.dumps(a[0])).hexdigest()

str 并不总是给出预期的结果

于 2013-03-16T10:44:24.487 回答
1

如何做类似的事情:

# 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([{...},{...}])

于 2013-03-16T10:43:46.713 回答
0
a =  [{3:4},{1:2}, {5:[5,6,7,7]} ]
hash(str(a))
于 2013-03-16T10:39:49.970 回答