我对这个问题有一些解决方案,但我知道在某个地方有一个优雅的解决方案,也许是两个班轮。
我有大量(M)项选择,基本上是具有数字特征的字典,例如: ItemOne = {width:5, height:10, cost:200,...}
我想将这组字典/项目分成 N (2, 3,...) 组,以便根据标准将宽度、高度或其他特征之间的差异保持在最低限度(我在想平方差的总和)。具有标准的部分不是问题,我只是很难找出分割数据集并获得所有组合而不重复子集的最佳方法。
我对这个问题有一些解决方案,但我知道在某个地方有一个优雅的解决方案,也许是两个班轮。
我有大量(M)项选择,基本上是具有数字特征的字典,例如: ItemOne = {width:5, height:10, cost:200,...}
我想将这组字典/项目分成 N (2, 3,...) 组,以便根据标准将宽度、高度或其他特征之间的差异保持在最低限度(我在想平方差的总和)。具有标准的部分不是问题,我只是很难找出分割数据集并获得所有组合而不重复子集的最佳方法。
不太清楚你在问什么,但我会试一试
#example items
items = [{'width':5, 'height':10, 'cost':200}, {'width':6, 'height':9, 'cost':2}]
#whatever you want your criteria to be
def calculate_criteria(item):
return item['width']+item['height']+item['cost']
# create subsets based on criterion
subsets = {}
for item in items:
criteria = calculate_criteria(item)
subset = subsets.get(criteria, list())
subset.append(item)
subsets[criteria] = subset
print subsets
{17: [{'width': 6, 'cost': 2, 'height': 9}], 215: [{'width': 5, 'cost': 200, 'height': 10}]}
甚至更好地使用collections.defaultdict
# create subsets based on criterion
subsets = collections.defaultdict(list)
for item in items:
subsets[calculate_criteria(item)].append(item)