我的字典是作为对象初始化的一部分构建的。我知道在对象的生命周期中它不会改变。字典将键映射到集合。我想将set
s中的所有值转换为frozenset
s,以确保它们不会被更改。目前我这样做:
for key in self.my_dict.iterkeys():
self.my_dict[key] = frozenset(self.my_dict[key])
有没有更简单的方法来实现这一目标?我无法立即构建frozenset
,因为在构建完整的字典之前,我没有在每个集合中有多少项目。
答案 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)