【问题标题】:Convert sets to frozensets as values of a dictionary将集合转换为frozensets 作为字典的值
【发布时间】:2011-03-03 12:34:18
【问题描述】:

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

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

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

【问题讨论】:

  • 你需要在原地做还是我们可以建立一个新的字典?

标签: python dictionary set


【解决方案1】:

例如,给定

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

    如果您必须就地进行,可能这是最简单的方法(几乎与您发布的相同):

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

      在 Python 3 中,您可以使用字典推导:

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

      不过,在 Python 2 中,我不知道还有什么更短的——这至少感觉不那么“冗余”:

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

      【讨论】:

      • 顺便说一句,字典理解也适用于 python 2.7。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2011-08-02
      • 2022-01-16
      • 1970-01-01
      • 2016-08-03
      • 2021-02-04
      相关资源
      最近更新 更多