将冻结集追加到集合

时间:2019-07-12 11:55:46

标签: python python-3.x set frozenset

我正在处理一段代码(用python编写),该代码接受以下形式的参数:

restricted_bonds = {
    frozenset((0, 10)),
    frozenset((3, 14)),
    frozenset((5, 6))
}

我有一个以下形式的元组:

tupl = ((0, 5, 6, 1), (4, 5, 6, 8))

在这里,我想创建一个可以读取为以下内容的Set:

d = {frozenset((0, 5, 6, 1)),
     frozenset((4, 5, 6, 8))
}

这个想法是要能够设置restricted_bonds = d

我尝试了以下几种变化:

for i in tupl:
    d[frozenset(i)] = ''

理想的结果将是:

d = {frozenset((0, 5, 6, 1)),
     frozenset((4, 5, 6, 8))
}

1 个答案:

答案 0 :(得分:4)

您没有字典。您有set objects;特别是包含set()个对象的frozenset()对象。这些不是人工制品,代码必须明确选择使用这些对象。参见section on sets in the Python tutorial

frozenset()对象只是不可变的集合;集合中存储的值必须是 hashable ,并且要是可哈希的,则要求存储的对象是不可变的(*)set()frozenset()都是内置类型,例如strlisttuple,您可以直接使用它们而无需导入。

只需使用set.add() method来添加单个值,然后使用set.update()|=扩展分配来向集合中添加更多元素。

如果只想从任意数量的元组创建新集合,请使用集合理解(在本教程的同一部分中进行了介绍):

tupl = ((0, 5, 6, 1), (4, 5, 6, 8))
d = {frozenset(t) for t in tupl}

(*):确切地说:用于确定相等性的对象的状态也必须用于确定哈希(相等的对象必须具有相同的哈希),并且哈希必须保持稳定。可以随意更改不用于确定相等性的与对象关联的其他属性。