キーにはfrozensetを使用する必要があります。同じ要素を持つセットが常に同じになる、repr
またはtuple
セットが順序付けされていないという保証はありません。もちろん、最初にセット要素を並べ替えない限り、それは無駄に思えます
from collections import defaultdict
dataset = [('121', set(['NY'])), ('132', set(['CA', 'NY'])), ('198', set(['NY'])), ('676', set(['NY'])), ('89', set(['NY', 'CA']))]
output = defaultdict(list)
for value, key in dataset:
output[frozenset(key)].append(value)
またはソートされたタプルを使用する
from collections import defaultdict
dataset = [('121', set(['NY'])), ('132', set(['CA', 'NY'])), ('198', set(['NY'])), ('676', set(['NY'])), ('89', set(['NY', 'CA']))]
output = defaultdict(list)
for value, key in dataset:
output[tuple(sorted(key))].append(value)
これを説明するためのランダムな例
>>> s,t = set([736, 9753, 7126, 7907, 3350]), set([3350, 7907, 7126, 9753, 736])
>>> s == t
True
>>> tuple(s) == tuple(t)
False
>>> frozenset(s) == frozenset(t)
True
>>> hash(tuple(s)) == hash(tuple(t))
False
>>> hash(frozenset(s)) == hash(frozenset(t))
True