Python 是否有方法根据标签对列表中的相同元素进行分组?
我有如下数据:Python 是否有方法根据标签对列表中的相同元素进行分组?,python,python-3.x,python-2.7,nlp,Python,Python 3.x,Python 2.7,Nlp,我有如下数据: data = [[234,"balablablabla"],[254,"ababaabbla"],[274,"nnnnnnnnnnblabla"],[284,"cccccccccblabla"]] 我有一个标签列表: labels=[0,0,1,0] 我希望在输出中有:将具有相同标签的数据的id放在同一个列表中,sam列表中的[234254284],因为标签1的[234,“Balabababla”
data = [[234,"balablablabla"],[254,"ababaabbla"],[274,"nnnnnnnnnnblabla"],[284,"cccccccccblabla"]]
我有一个标签列表:
labels=[0,0,1,0]
我希望在输出中有:将具有相同标签的数据的id放在同一个列表中,sam列表中的[234254284],因为标签1的[234,“Balabababla”]和[254,“Ababababala”]和[284,“CCCCCCCCCCCCCCC Blabla”]的标签分别为0和[274,“nnnnnnnnnn Blabla”]:
results = [[234,254,284],[274]]
PS:在这个简短的示例中,标签是0或1,但它可以是0,1,2,…,1000更具python风格的解决方案是使用
defaultdict
。这将为您提供作为字典键的标签和作为相应值的标签列表
data = [[234,"balablablabla"],[254,"ababaabbla"],[274,"nnnnnnnnnnblabla"],[284,"cccccccccblabla"]]
labels=[0,0,1,0]
result=[[] for i in range(max(labels)-min(labels)+1)]
for i in range(len(labels)):
result[labels[i]].append(data[i][0])
print(result)
>>从集合导入defaultdict
>>>数据=[[234,“巴拉布拉”],
[254,“阿巴巴巴拉”],
[274,“nnnnnnnn blabla”],
[284,“CCCCCCBlabla”]]
>>>标签=[0,0,1,0]
>>>结果=defaultdict(列表)
>>>对于标签,zip中的行(标签、数据):
... 结果[label]。追加(第[0]行)
...
>>>打印(结果)
defaultdict(,{0:[2342584],1:[274]})
现在假设存在重复项,并且希望每个标签上都有唯一的数据,那么可以使用defaultdict(set)
对象
数据=[[234,“巴拉布拉”],
[254,“阿巴巴巴拉”],
[234,“巴拉布拉”],#重复值
[274,“nnnnnnnn blabla”],
[284,“CCCCCCBlabla”]]
>>>标签=[0,0,0,1,0]
>>>结果=默认DICT(设置)
>>>对于标签,zip中的行(标签、数据):
... 结果[标签]。添加(第[0]行)
...
>>>打印(结果)
defaultdict(,{0:{234284254},1:{274})