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 に答える