Python3-通过循环重构给定集合来减少列表

Python3-通过循环重构给定集合来减少列表,python,python-3.x,algorithm,sorting,Python,Python 3.x,Algorithm,Sorting,我正在寻找一种算法,通过将给定的集合重建为模式来减少元组列表 每个元组包含一个id和一个集合,如(1,{'xy'}) 示例 query = {'xyz'} my_dict = [(1, {'x'}), (2, {'yx'}), (3, {'yz'}), (4, {'z'}), (5, {'x'}), (6, {'y'}), (7, {'xyz'}), (8, {'xy'}), (9, {'x'}),] 目标是尽可能频繁地重新创建模式xyz,给定m

我正在寻找一种算法,通过将给定的集合重建为模式来减少元组列表

每个元组包含一个id和一个集合,如
(1,{'xy'})

示例

query = {'xyz'}

my_dict = [(1, {'x'}), (2, {'yx'}), (3, {'yz'}),
           (4, {'z'}), (5, {'x'}), (6, {'y'}), 
           (7, {'xyz'}), (8, {'xy'}), (9, {'x'}),]
目标是尽可能频繁地重新创建模式
xyz
,给定
my_dict
中元组的第二个值。不能完全重构查询集的剩余元素应被切断,因此“减少”

my_dict
总共包含:6次
x
,5次
y
,3次
z

考虑到
my_dict
,有效的解决方案可能是:

result_1 = [(7, {'xyz'}), (8, {'xy'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
result_2 = [(7, {'xyz'}), (2, {'yx'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
result_3 = [(7, {'xyz'}), (9, {'x'}), (6, {'y'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
列表中元组的顺序并不重要,为了便于说明,我按照查询模式
xyz
的顺序对它们进行了排序

目标

目标是要有一个元组列表,其中查询集中元素的总出现次数分布最均匀

result\u 1
result\u 2
result\u 3
总共包含:3次
x
、3次
y
、3次
z

有人知道如何做到这一点吗


谢谢你的帮助

根据您的应用程序上下文,简单的暴力方法可能就足够了:使用

当给定的供应子集(
my_dict.values()
)是给定查询的有效解决方案时,您需要实现一个函数
is_solution(query,subset)
,该函数返回
True

def find_solutions(query, supply):
    for subset in powerset(supply):   
        if is_solution(query, subset):
            yield subset