Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用项目内的标签对列表中的项目进行分组?_Python_List_Ner - Fatal编程技术网

Python 如何使用项目内的标签对列表中的项目进行分组?

Python 如何使用项目内的标签对列表中的项目进行分组?,python,list,ner,Python,List,Ner,有如下列表: list_a = [('B-DATE', '07'),('I-DATE', '/'),('I-DATE', '08'),('I-DATE', '/'),('I-DATE', '20'),('B-LAW', 'Abc'),('I-LAW', 'def'),('I-LAW', 'ghj'),('I-LAW', 'klm')] 我需要根据列表a[x][0]标签加入列表a[x][1]项目:“以字母B开头”并全部加入下一个“B-开头”标签(列表a[x][0]): 类似于在Oracle中使用

有如下列表:

list_a = [('B-DATE', '07'),('I-DATE', '/'),('I-DATE', '08'),('I-DATE', '/'),('I-DATE', '20'),('B-LAW', 'Abc'),('I-LAW', 'def'),('I-LAW', 'ghj'),('I-LAW', 'klm')]
我需要根据
列表a[x][0]
标签加入
列表a[x][1]
项目:“以字母B开头”并全部加入下一个“B-开头”标签(
列表a[x][0]
):


类似于在Oracle中使用stringagg+groupby:)

这是一种使用
str.startswith
的简单迭代的方法

Ex:

list_a = [('B-DATE', '07'),('I-DATE', '/'),('I-DATE', '08'),('I-DATE', '/'),('I-DATE', '20'),('B-LAW', 'Abc'),('I-LAW', 'def'),('I-LAW', 'ghj'),('I-LAW', 'klm')]
res = []
for k, v in list_a:
    if k.startswith("B"):   #Check starts with `B`
        res.append(v)
    else:
        res[-1]+= v
print(res)
['07/08/20', 'Abcdefghjklm']
输出:

list_a = [('B-DATE', '07'),('I-DATE', '/'),('I-DATE', '08'),('I-DATE', '/'),('I-DATE', '20'),('B-LAW', 'Abc'),('I-LAW', 'def'),('I-LAW', 'ghj'),('I-LAW', 'klm')]
res = []
for k, v in list_a:
    if k.startswith("B"):   #Check starts with `B`
        res.append(v)
    else:
        res[-1]+= v
print(res)
['07/08/20', 'Abcdefghjklm']

这是一种使用
str.startswith
的简单迭代的方法

Ex:

list_a = [('B-DATE', '07'),('I-DATE', '/'),('I-DATE', '08'),('I-DATE', '/'),('I-DATE', '20'),('B-LAW', 'Abc'),('I-LAW', 'def'),('I-LAW', 'ghj'),('I-LAW', 'klm')]
res = []
for k, v in list_a:
    if k.startswith("B"):   #Check starts with `B`
        res.append(v)
    else:
        res[-1]+= v
print(res)
['07/08/20', 'Abcdefghjklm']
输出:

list_a = [('B-DATE', '07'),('I-DATE', '/'),('I-DATE', '08'),('I-DATE', '/'),('I-DATE', '20'),('B-LAW', 'Abc'),('I-LAW', 'def'),('I-LAW', 'ghj'),('I-LAW', 'klm')]
res = []
for k, v in list_a:
    if k.startswith("B"):   #Check starts with `B`
        res.append(v)
    else:
        res[-1]+= v
print(res)
['07/08/20', 'Abcdefghjklm']

您可以在下面尝试:

        output = []
        for obj in list_a:
            if obj[0].startswith('B'):
                output.append(obj[1])
            else:
                output[-1] += obj[1]
        print(output)

您可以在下面尝试:

        output = []
        for obj in list_a:
            if obj[0].startswith('B'):
                output.append(obj[1])
            else:
                output[-1] += obj[1]
        print(output)

这是我的变体,但我希望有更“现代”的方式在python上实现:

list_b = []
for i in range(len(list_a)):
    if list_a[i][0][0] == 'B':
      list_b += [list_a[i][1]]
    else:
      list_b[len(list_b)-1] += list_a[i][1]    
print(list_b)

这是我的变体,但我希望有更“现代”的方式在python上实现:

list_b = []
for i in range(len(list_a)):
    if list_a[i][0][0] == 'B':
      list_b += [list_a[i][1]]
    else:
      list_b[len(list_b)-1] += list_a[i][1]    
print(list_b)
单线解 下面是一个使用列表理解的单行答案。诀窍是在每次新出现的
'B'
的值前面使用一个明显可识别的分隔符(我使用了
'| |'

str(''.join([f'| | | |{v}如果k.startswith(“B”)或v代表列表a中的(k,v)).split('| | |}')[1:]
输出

['07/08/20', 'Abcdefghjklm']
算法

  • 创建一个值列表,其中与每次新出现的
    'B'
    对应的值前面都有
    '| | |'
  • 将列表中的所有项目合并为一个字符串
  • 用分隔符“
    ”| | |“
    拆分字符串
  • str.split()
    保留除第一个元素以外的所有元素
  • 单线解 下面是一个使用列表理解的单行答案。诀窍是在每次新出现的
    'B'
    的值前面使用一个明显可识别的分隔符(我使用了
    '| |'

    str(''.join([f'| | | |{v}如果k.startswith(“B”)或v代表列表a中的(k,v)).split('| | |}')[1:]
    
    输出

    ['07/08/20', 'Abcdefghjklm']
    
    算法

  • 创建一个值列表,其中与每次新出现的
    'B'
    对应的值前面都有
    '| | |'
  • 将列表中的所有项目合并为一个字符串
  • 用分隔符“
    ”| | |“
    拆分字符串
  • str.split()
    保留除第一个元素以外的所有元素

  • 我希望这件事可以不绕圈子。可能有一些lambda函数+itertools:(我认为循环是无法避免的,因为您有一个tuples@Rakesh您可以使用列表理解在一行中完成此操作。因为我修改了您的答案,发现您的答案是其他答案中最具Python风格的,所以我也投票支持您。我希望它可以在没有循环的情况下完成。可能有一些lambda函数+itertools:(我认为循环是无法避免的,因为您有一个tuples@Rakesh您可以使用列表理解在一行中完成此操作。因为我修改了您的答案,发现您的答案是其他答案中最具Python风格的,所以我也投票支持您。我希望它可以在没有循环的情况下完成。可能有一些lambda函数+itertools:(我希望它能在没有循环的情况下完成。也许是一些lambda函数+itertools:(@lullia这个怎么样?太棒了!!!!你真的是python大师!非常感谢!当我获得15个声誉时,你会得到我的声音:)@Lullia很高兴我能帮上忙!你能不能
    接受
    投票
    答案?谢谢你。@Lullia这个怎么样?太棒了!!!你真的是python大师!非常感谢!当我获得15个声誉时,你会听到我的声音:)@Lullia很高兴我能帮上忙!你能接受和投票吗?谢谢。