Вам необходимо использовать 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
Вы хотите наборы быть ключами, или вы хотите строковое представление множества быть ключ? – Trevor
Строка представляет собой ключ. – ThinkCode