我正在处理一段代码(用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))
}
答案 0 :(得分:4)
您没有字典。您有set objects;特别是包含set()
个对象的frozenset()
对象。这些不是人工制品,代码必须明确选择使用这些对象。参见section on sets in the Python tutorial。
frozenset()
对象只是不可变的集合;集合中存储的值必须是 hashable ,并且要是可哈希的,则要求存储的对象是不可变的(*)。 set()
和frozenset()
都是内置类型,例如str
和list
和tuple
,您可以直接使用它们而无需导入。
只需使用set.add()
method来添加单个值,然后使用set.update()
或|=
扩展分配来向集合中添加更多元素。
如果只想从任意数量的元组创建新集合,请使用集合理解(在本教程的同一部分中进行了介绍):
tupl = ((0, 5, 6, 1), (4, 5, 6, 8))
d = {frozenset(t) for t in tupl}
(*):确切地说:用于确定相等性的对象的状态也必须用于确定哈希(相等的对象必须具有相同的哈希),并且哈希必须保持稳定。可以随意更改不用于确定相等性的与对象关联的其他属性。