在 python 中将 frozenset 转换为字典

Convert a frozenset to a dictionary in python

我有以下 frozenset:

f_set = [frozenset({8, 14, 15, 18}), frozenset({1, 2, 3, 7, 8}), frozenset({0, 4, 5})]

我需要将f_set转换成字典如下

现在,如果某些键存在于多个集合中,请为它们分配一个新值。在这种情况下,集合 1 和集合 2 中都存在 8,因此分配值 3。

dict1 = {8:3, 14:0, 15:0, 18:0, 1:1, 2:1, 3:1, 7:1, 0:2, 4:2, 5:2}

注意:我的实际 f_set 包含三组以上,所以我想避免手动进行。

你可以使用字典理解 enumerate:

f_set = [frozenset({8, 14, 15, 18}), frozenset({1, 2, 3, 7, 8}), frozenset({0, 4, 5})]

dict1 = {x: i for i, s in enumerate(f_set) for x in s}
print(dict1)
# {8: 1, 18: 0, 14: 0, 15: 0, 1: 1, 2: 1, 3: 1, 7: 1, 0: 2, 4: 2, 5: 2}

请注意,如果集合不是相互不相交的,一些键将被丢弃,因为字典不能有重复的键。

您可以简单地循环 frozensets 以在输出字典中设置它们中的每一个:

output = dict()
    
for i in range(len(f_set)):
    for s in f_set[i]:
        output[s] = i

请注意,虽然顺序可能与您的顺序不同,但字典中的顺序应该无关紧要。