Конвертировать наборы в frozensets как значения словаря - PullRequest
6 голосов
/ 14 июня 2010

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

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

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

Ответы [ 3 ]

6 голосов
/ 14 июня 2010

Например,

>>> 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])}
1 голос
/ 14 июня 2010

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

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

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

self.my_dict = dict(((key, frozenset(value)) \
                    for key, value in self.my_dict.iteritems()))
0 голосов
/ 14 июня 2010

В Python 3 вы можете использовать словарь:

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

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

for k,v in d.iteritems():
    d[k] = frozenset(v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...