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

时间:2010-06-14 13:19:35

标签: python dictionary set

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

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

有没有更简单的方法来实现这一目标?我无法立即构建frozenset,因为在构建完整的字典之前,我没有在每个集合中有多少项目。

3 个答案:

答案 0 :(得分:6)

例如,给出

>>> 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 :(得分:1)

如果你必须就地进行,可能这是最简单的方法(几乎和你发布的一样):

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()))

答案 2 :(得分:0)

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

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

但是,在Python 2中,我不知道有什么更短的 - 这至少感觉不那么“多余”:

for k,v in d.iteritems():
    d[k] = frozenset(v)