0

我正在使用一段代码(用 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))
}
4

1 回答 1

4

你没有字典。你已经设置了对象;特别是set()包含对象的frozenset()对象。这些不是人工制品,代码必须明确选择使用这些对象。请参阅Python 教程中关于集合的部分

frozenset()对象只是不可变的集合;存储在集合中的值必须是可散列的,并且可散列要求存储的对象是不可变的(*)set()和都是frozenset()内置类型,比如strandlisttuple,你可以直接使用它们而无需导入。

只需使用该set.add()方法添加单独的值,set.update()或使用|=扩充分配向您的集合添加更多元素。

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

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

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

于 2019-07-12T12:00:36.723 回答