Python-高效的数据分组

时间:2019-04-15 04:04:05

标签: python sorting memory-efficient

想象一下,大约有200个群组预设。 每个组都附加有X个“项目”。一组可以有一个或100个项目。 组通常具有共享名称的项目,即。 Group_0040可以具有item_abcde,item_bcda,item_bcba,而Group_0120可以具有相同的item_abcd,但10个其他不与Group_0040共享。

整理X#组列表中共有最多项目的最有效方法是什么? 我认为最终理想的数据是:

  • 从MOST到最不常见
  • 具有这些共同点的组的列表
  • 商品名称。

即,最常见的可能是:

[{'groups': [<Group_0040>, <Group_0041>, <Group_0022, <Group_0076>, <Group_0054>, <Group_0192>, <Group_0017>],
  'items': [<Item_acdb>, <Item_ddbc>, <Item_dddb>, <Item_cbcb>, <Item_acba>, <Item_aaba>]
  }
  ....
]

收集此数据也将具有截止值-即,必须有X个共同的组,并且必须有X个共同的项目才能被考虑。 即:

getSharedItemGroups(minGroups = 4,minItems = 5)

示例:

class Group(object):
def __init__(self, name):

    self.name = name
    self.items = []

    def addItem(self, item):
        self.items.append(item)

class Item(object):
    def __init__(self, name):       
        self.name = name

import random
import string

groups = []
for x in range(200):
    groups.append(Group('Group_{0:04d}'.format(x)))

letters = string.lowercase
for group in groups:
    for i in range(random.randint(0,50)):
        tag = ''
        for c in range(4):
            tag += letters[random.randint(4)]
        group.addItem(Item('item_' + tag)

0 个答案:

没有答案