Python 3.x 在纯python中,如何在另一列上找到一个列分组的最大长度的行

Python 3.x 在纯python中,如何在另一列上找到一个列分组的最大长度的行,python-3.x,Python 3.x,我是python新手。我需要一些类似sql的功能,最好使用纯python而不是panda。需要在第二列上分组,并获得第一列中长度最大的列。 要求中的细微变化。我的要求是得到长度刚好小于最大长度的标签。 步骤1:获取第二列中/的最大计数。 步骤2:返回第二列中/的计数比步骤1中的计数少一的标签 我的名单包括: ['MYDATA_FILE_XT', '/MYDATA/FILE/XT/ROW/STATUS', 'string'] ['MYDATA_FILE_XT_ROW', '/MYDATA/FIL

我是python新手。我需要一些类似sql的功能,最好使用纯python而不是panda。需要在第二列上分组,并获得第一列中长度最大的列。 要求中的细微变化。我的要求是得到长度刚好小于最大长度的标签。 步骤1:获取第二列中/的最大计数。 步骤2:返回第二列中/的计数比步骤1中的计数少一的标签 我的名单包括:

 ['MYDATA_FILE_XT', '/MYDATA/FILE/XT/ROW/STATUS', 'string']
['MYDATA_FILE_XT_ROW', '/MYDATA/FILE/XT/ROW/STATUS', 'string']
['MYDATA_FILE_XT_ROW_STATUS', '/MYDATA/FILE/XT/ROW/STATUS', 'string']
['XX', '/MYDATA/FILE/XV/ROW/CURRENCY_CODE', 'string']
['MYDATA', '/MYDATA/FILE/XV/ROW/CURRENCY_CODE', 'string']
['MYDATA_FILE', '/MYDATA/FILE/XV/ROW/CURRENCY_CODE', 'string']
['MYDATA_FILE_XV', '/MYDATA/FILE/XV/ROW/CURRENCY_CODE', 'string']
['MYDATA_FILE_XV_ROW', '/MYDATA/FILE/XV/ROW/CURRENCY_CODE', 'string']
['MYDATA_FILE_XV_ROW_CURRENCY_CODE', '/MYDATA/FILE/XV/ROW/CURRENCY_CODE', 'string']
['YY', '/MYDATA/FILE/XV/ROW/EXCESS_AMOUNT', 'string']
['MYDATA', '/MYDATA/FILE/XV/ROW/EXCESS_AMOUNT', 'string']
['MYDATA_FILE', '/MYDATA/FILE/XV/ROW/EXCESS_AMOUNT', 'string']
['MYDATA_FILE_XV', '/MYDATA/FILE/XV/ROW/EXCESS_AMOUNT', 'string']
['MYDATA_FILE_XV_ROW', '/MYDATA/FILE/XV/ROW/EXCESS_AMOUNT', 'string']
['MYDATA_FILE_XV_ROW_EXCESS_AMOUNT', '/MYDATA/FILE/XV/ROW/EXCESS_AMOUNT', 'string']
['LM', '/MYDATA/FILE/XV/ROW/USD_EQUIVALENT', 'string']
['MYDATA', '/MYDATA/FILE/XV/ROW/USD_EQUIVALENT', 'string']
['MYDATA_FILE', '/MYDATA/FILE/XV/ROW/USD_EQUIVALENT', 'string']
['MYDATA_FILE_XV', '/MYDATA/FILE/XV/ROW/USD_EQUIVALENT', 'string']
['MYDATA_FILE_XV_ROW', '/MYDATA/FILE/XV/ROW/USD_EQUIVALENT', 'string']
['MYDATA_FILE_XV_ROW_USD_EQUIVALENT', '/MYDATA/FILE/XV/ROW/USD_EQUIVALENT', 'string']
新期望: ['MYDATA\u文件\u XT\u行']
['MYDATA\u FILE\u XV\u ROW']

您可以创建一个字典,存储第二列的最大长度路径,然后将其转换为列表

for row in rows:
 try:
    length=len(result[row[1]])
    if(len(row[0])>length):
        result[row[1]]=row[0]
 except:
    result[rows[1]]=row[0]

假设您的列表位于名为
data
的变量中,则应使用预期结果填充变量
cleaned

from functools import reduce
from itertools import groupby
from operator import itemgetter

cleaned = []
for key, values in groupby(data, itemgetter(1)):
    cleaned += [reduce(lambda x, y: x if len(x[0]) > len(y[0]) else y, values)]

谢谢你,乔布。这很好用。