Python 将集合转换为frozensets作为字典的值

Python 将集合转换为frozensets作为字典的值,python,dictionary,set,Python,Dictionary,Set,我有一个字典,它是作为对象初始化的一部分构建的。我知道它在对象的生命周期内不会改变。字典将键映射到集合。我想将sets中的所有值转换为frozensets,以确保它们不会被更改。目前我是这样做的: for key in self.my_dict.iterkeys(): self.my_dict[key] = frozenset(self.my_dict[key]) 有没有更简单的方法来实现这一点?我不能马上建立冻结集,因为在我建立完整的字典之前,我不知道每个集合中会有多少项。如果你必须

我有一个字典,它是作为对象初始化的一部分构建的。我知道它在对象的生命周期内不会改变。字典将键映射到集合。我想将
set
s中的所有值转换为
frozenset
s,以确保它们不会被更改。目前我是这样做的:

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

有没有更简单的方法来实现这一点?我不能马上建立
冻结集,因为在我建立完整的字典之前,我不知道每个集合中会有多少项。

如果你必须在适当的地方建立,这可能是最简单的方法(几乎与你发布的方法相同):

这是一个构建临时dict的变体:

self.my_dict = dict(((key, frozenset(value)) \
                    for key, value in self.my_dict.iteritems()))

在Python 3中,可以使用字典理解:

d = {k: frozenset(v) for k, v in d.items()}
不过,在Python 2中,我不知道还有更短的内容——至少感觉不那么“多余”:

比如说,

>>> 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])}

您需要在适当的位置执行吗?或者我们可以构建一个新的dict吗?顺便说一下,字典理解在Python2.7中也可以工作。
>>> d.update((k, frozenset(v)) for k, v in d.iteritems())
>>> d
{'a': frozenset([1, 2]), 'b': frozenset([3, 4])}