Python 3.x 如何基于指示符序列聚合字符串长度序列

Python 3.x 如何基于指示符序列聚合字符串长度序列,python-3.x,Python 3.x,我有一个有两个键的字典,它们的值是字符串列表 我想根据另一个列表中的指示符计算一个列表的字符串长度 很难确定问题是单词,所以让我们看一个例子 下面是一个示例词典: thisdict ={ 'brand': ['Ford','bmw','toyota','benz','audi','subaru','ferrari','volvo','saab'], 'type': ['O','B','O','B','I','I','O','B','B'] } 现在,我想在字典中添加一个条目,该条目对应

我有一个有两个键的字典,它们的值是字符串列表

我想根据另一个列表中的指示符计算一个列表的字符串长度

很难确定问题是单词,所以让我们看一个例子

下面是一个示例词典:

thisdict ={
  'brand': ['Ford','bmw','toyota','benz','audi','subaru','ferrari','volvo','saab'],
  'type': ['O','B','O','B','I','I','O','B','B']
}
现在,我想在字典中添加一个条目,该条目对应于基于“类型序列”条件的“品牌字符串序列”的字符串累积长度

标准如下:

如果type='O',则为该索引设置字符串长度=0

如果类型为“B”,则将字符串长度设置为相应的字符串长度

如果type='I',则是事情变得复杂的时候。您可能希望回顾序列并对字符串长度求和,直到到达第一个“B”

以下是一个示例输出:

thisdict ={
  "brand": ['Ford','bmw','toyota','benz','audi','subaru','ferrari','volvo','saab'],
  'type': ['O','B','O','B','I','I','O','B','B'],
  'cumulative-length':[0,3,0,4,8,14,0,5,4]  
}
其中8=奔驰蓝+奥迪蓝,14=奔驰蓝+奥迪蓝(斯巴鲁)

请注意,在我正在处理的实际数据中,序列可以是一个“B”,后跟任意数量的“I”。因此,我正在寻找一种在这种情况下可靠的解决方案。
谢谢

您可以使用zip功能将品牌和类型绑定在一起。然后,在循环遍历字典值时,只需保持一个运行总数。此解决方案将支持品牌列表中的任意长度系列和任意长度字符串。我假设
len(thisdict['brand'])==len(thisdict['type'])

生成随机数据

import random
import string

def get_random_brand_and_type():

    n = random.randint(1,8)
    b = ''.join(random.choice(string.ascii_uppercase) for _ in range(n))
    t = random.choice(['B', 'I', 'O'])

    return b, t

thisdict = {
    'brand': [],
    'type': []
}

for i in range(random.randint(1,20)):
    b, t = get_random_brand_and_type()
    thisdict['brand'].append(b)
    thisdict['type'].append(t)
产生以下结果:

{'type': ['B', 'B', 'O', 'I', 'B', 'O', 'O', 'I', 'O'], 
 'brand': ['O', 'BSYMLFN', 'OF', 'SO', 'KPQGRW', 'DLCWW', 'VLU', 'ZQE', 'GEUHERHE']}
[1, 7, 0, 9, 6, 0, 0, 9, 0]
{'type': ['B', 'B', 'O', 'I', 'B', 'O', 'O', 'I', 'O'], 
 'brand': ['O', 'BSYMLFN', 'OF', 'SO', 'KPQGRW', 'DLCWW', 'VLU', 'ZQE', 'GEUHERHE']}
[1, 7, 0, 9, 6, 0, 0, 9, 0]