将冻结集附加到字典

Appending frozensets to a dictionary

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

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

我有一个形式的元组:

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

其中,我想创建一个 frozenset,它可以读作:

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

你没有字典。你有 set objects; specifically a set() object containing frozenset() objects. These are not artefacts, code has to explicitly make a choice to use these objects. See the section on sets in the Python tutorial.

frozenset() 对象只是不可变的集合;存储在集合中的值必须 可散列 ,并且可散列要求存储的对象是不可变的 (*)set()frozenset() 都是 built-in 类型,就像 strlisttuple 一样,你可以直接使用它们而不需要导入。

只需使用 set.add() method to add individual values, and set.update()|= 扩充赋值即可将更多元素添加到您的集合中。

如果您只想从任意数量的元组创建一个新集合,请使用集合推导(在本教程的同一部分中提到):

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

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