Преобразуйте наборы в frozensets как значения словаря

У меня есть словарь, который создается как часть инициализации моего объекта. Я знаю, что это не изменится в течение времени жизни объекта. Словарь отображает ключи к наборам. Я хочу преобразовать все значения из sets к frozensets, для проверки они не становятся измененными. В настоящее время я делаю это как это:

for key in self.my_dict.iterkeys():
    self.my_dict[key] = frozenset(self.my_dict[key])

Существует ли более простой способ достигнуть этого? Я не могу создать frozenset сразу же, потому что я не делаю, каким количеством объекты будут в каждом наборе, пока я не создал полный словарь.

6
задан Björn Pollex 14 June 2010 в 13:19
поделиться

3 ответа

Например,

>>> d = {'a': set([1, 2]), 'b': set([3, 4])}
>>> d
{'a': set([1, 2]), 'b': set([3, 4])}

Вы можете выполнить преобразование на месте как

>>> d.update((k, frozenset(v)) for k, v in d.iteritems())

С результатом

>>> d
{'a': frozenset([1, 2]), 'b': frozenset([3, 4])}
6
ответ дан 16 December 2019 в 21:34
поделиться

Если вам нужно сделать это на месте, возможно, это самый простой способ (почти такой же, как вы писали):

for key, value in self.my_dict.iteritems():
    self.my_dict[key] = frozenset(value)

Это вариант, который создает временный dict:

self.my_dict = dict(((key, frozenset(value)) \
                    for key, value in self.my_dict.iteritems()))
1
ответ дан 16 December 2019 в 21:34
поделиться

В Python 3 вы могли бы использовать понимание словаря:

d = {k: frozenset(v) for k, v in d.items()}

Однако в Python 2 я не знаю, есть ли что-нибудь короче - это, по крайней мере, кажется менее «избыточным»:

for k,v in d.iteritems():
    d[k] = frozenset(v)
1
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: