Python高效数据分组

2024-04-23 19:37:27 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有大约200组预设。 每组有X个“项目”附加到它。一个组可以有一个项目,也可以有100个项目。 组通常有共享名称的项,例如。 组\u 0040可以有项目\u abcde、项目\u bcda、项目\u bcba,组\u 0120可以有共同的项目\u abcd,但其他10个项目不能与组\u 0040共享

什么是最有效的整理X组列表的方法?这些组有最多的共同点? 我认为理想情况下,最终有用的数据是:

  • 从最常见到最不常见
  • 具有这些共同项的组的列表
  • 项目名称

例如,最常见的可能是:

[{'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)

Tags: 项目nameinself列表fordeftag