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]