我现在有三个输入,
combs_dict = {frozenset({'time'}): '0', frozenset({'rfid'}): '0', frozenset({'rfid', 'time'}): '0', frozenset({'zone', 'rfid'}): '0', frozenset(): '0', frozenset({'zone', 'time'}): '0', frozenset({'zone'}): '0'}
prob_dict = {'2': '0.5', '4': '0.05', '3': '0.3', '1': '0.15'}
map_dict = {'2': {frozenset({'rfid', 'time'}), frozenset({'zone', 'time'})}, '4': {frozenset({'rfid', 'zone'})}, '1': {frozenset({'zone', 'time'})}, '3': {frozenset({'rfid', 'time'}), frozenset({'rfid', 'zone'})}}
我正在尝试将combs_dict与map_dict进行比较。如果combs_dict中的任何键是map_dict值中任何元素的超集(> =),那么我必须将该键的相应概率从prob_dict添加到combs_dict的值。
例如,如果我从combs_dict中获取freezeset({'rfid','time'})并与map_dict中的值进行比较,并发现它是此{'2'的超集:{frozenset({'rfid ','time'}),frozenset({'zone','time'})}和'3':{frozenset({'rfid','time'}),因为它们都有它的等价物或子集。我将不得不从prob_dict获得其键2和3的概率,并将其与combs_dict中的值相加如此(frozenset({'rfid','time'}):'0'+'0.5 +'0.05' )。
我现在尝试的是这个,
for k,v in combs.items():
for ky,values in map_output.items():
if any(k>=l for l in values):
v = v + (j for i,j in prob.items() if i == ky)
但我无法在'v'中添加概率,因为j作为生成器返回。有人可以帮忙解决这个问题。有没有选择使用多处理并行化这个?因为我将在comb_dict中拥有近50k frozensets,所以我必须将每个冻结集与map_ouput中的每个元素进行比较。
如果有任何不清楚的地方,请告诉我。我会解释一下。