【问题标题】:is there a method to group same elements in the liste according to labels?有没有一种方法可以根据标签对列表中的相同元素进行分组?
【发布时间】:2021-02-04 14:20:12
【问题描述】:

我有这样的数据:

data = [[234,"balablablabla"],[254,"ababaabbla"],[274,"nnnnnnnnnnblabla"],[284,"cccccccccblabla"]]

我有一个标签列表:

labels=[0,0,1,0]

我想在输出中:将具有相同标签的数据的 id 放在同一个列表中,将 [234,254,284] 放在 sam 列表中,因为 [234,"balablablabla"] 和 [254,"ababaabbla 的标签"] 和 [284,"cccccccccblabla"] 是 0 和标签 1 的 [274,"nnnnnnnnnnblabla"] :

results =  [[234,254,284],[274]]

PS:在这个简短的例子中,标签是 0 或 1,但它可以是 0,1,2,...,1000

【问题讨论】:

    标签: python python-3.x python-2.7 nlp


    【解决方案1】:
    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)
    

    【讨论】:

      【解决方案2】:

      更 Pythonic 的解决方案是使用 defaultdict。这将为您提供作为字典键的标签和作为相应值的标签列表。

      >>> from collections import defaultdict
      >>> data = [[234, "balablablabla"], 
                  [254, "ababaabbla"],
                  [274, "nnnnnnnnnnblabla"],
                  [284, "cccccccccblabla"]]
      >>> labels = [0, 0, 1, 0]
      >>> results = defaultdict(list)
      >>> for label, row in zip(labels, data):
      ...     results[label].append(row[0])
      ...
      >>> print(results)
      defaultdict(<class 'list'>, {0: [234, 254, 284], 1: [274]})
      

      现在假设存在重复项,并且您希望每个标签的唯一数据,那么您可以改用 defaultdict(set) 对象。

      >>> data = [[234, "balablablabla"], 
                  [254, "ababaabbla"],
                  [234, "balablablabla"], # Duplicate Value
                  [274, "nnnnnnnnnnblabla"], 
                  [284, "cccccccccblabla"]]
      >>> labels = [0, 0, 0, 1, 0]
      >>> results = defaultdict(set)
      >>> for label, row in zip(labels, data):
      ...     results[label].add(row[0])
      ...
      >>> print(results)
      defaultdict(<class 'set'>, {0: {234, 284, 254}, 1: {274}})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 2013-03-08
        • 2022-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-27
        相关资源
        最近更新 更多