2010-06-14 71 views
5

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

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

有没有更简单的方法来实现这一目标?我不能立刻建立frozenset,因为我没有多少物品会在每一套,直到我建立了完整的字典。

+0

您是否需要做到位或我们可以b使用新字典? – 2010-06-14 13:22:46

+0

原地是首选。 – 2010-06-14 13:31:40

回答

5

考虑,例如,

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

如果你必须这样做原地的,大概这是最简单的方式(几乎为您发布相同):

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

在Python 3,你可以使用字典解析:

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

在Python 2,虽然,我不知道疗法E公司的任何短 - 这至少感觉不那么 “多余”:

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

顺便说一下,字典理解也适用于python 2.7。 – LarsVegas 2012-10-04 13:33:58