代码之家  ›  专栏  ›  技术社区  ›  Björn Pollex

将集合转换为冻结集合作为字典的值

  •  6
  • Björn Pollex  · 技术社区  · 14 年前

    set s到 frozenset s、 以确保它们不会被改变。目前我是这样做的:

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

    冻结 马上,因为我不知道有多少项目将在每个集,直到我建立了完整的字典。

    3 回复  |  直到 14 年前
        1
  •  6
  •   krawyoti    14 年前

    比如说,

    >>> 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])}
    
        2
  •  1
  •   Tamás    14 年前

    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()))
    
        3
  •  1
  •   Craig Citro    14 年前

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

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

    不过,在Python2中,我不知道还有什么更短的东西——这至少让人感觉不那么“多余”:

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