python - 如何为列表中的重复值获取相同的值
问题描述
我有 2 个列表(关键字,a):
keywords = ['a','b','c','d','j','i','k']
a = ['a','b','c','d','e','f','a','b','c','d','e','f']
我需要实现的是列表a中关键字列表中没有的值替换为var_x,但相同的值必须具有相同的值
例子:
a = ['a','b','c','d','e','f','a','b','c','d','e','f'] ---> ['a','b','c','d','var_1','var_2','a','b','c','d','var_1','var_2']
我遇到的问题是相等的值具有不同的 var_x 值。
keywords = ['a','b','c','d','j','i','k']
a = ['a','b','c','d','e','f','a','b','c','d','e','f']
def replace_sub_b(sub_b):
bl = sub_b.split()
print(bl)
index = 0
rl = []
for c in bl:
if c in keywords:
rl.append(c)
else:
index += 1
rl.append(f'var_{index}')
return ' '.join(rl)
new_b = [replace_sub_b(sub_b) for sub_b in a]
new_b
['a', 'b', 'c', 'd', 'var_1', 'var_1', 'a', 'b', 'c', 'd', 'var_1', 'var_1']
它应该是: ['a','b','c','d','var_1','var_2','a','b','c','d','var_2', 'var_1']
你能给我一些线索或提示吗?
解决方案
您可以使用映射字典来跟踪每个非关键字映射到的名称:
mapping = {}
for i, v in enumerate(a):
if v not in keywords:
if v not in mapping:
mapping[v] = f'var_{len(mapping) + 1}'
a[i] = mapping[v]
这样您的样本输入a
就变成了:
['a', 'b', 'c', 'd', 'var_1', 'var_2', 'a', 'b', 'c', 'd', 'var_1', 'var_2']
推荐阅读
- flutter - 即使我总是可滚动,我的 Listview 也不会滚动
- mysql - 使用 SQL 将 json 数据列表字段转换为列
- javascript - 从 javascript 代码获取数据到 blazor 中的剃刀页面代码
- spring - 优化回答休息 springboot/jhipster
- c# - 获取分配给他们的用户股票 + 那些尚未分配的股票
- cdn - 通过 CDN 流式传输实时专有内容
- google-cloud-platform - 如何将 YouTube 中的视频导入谷歌云平台?
- c# - 如果禁用,Core MVC CheckBox 返回 false
- ios - 设置 preferredContentSize 值似乎为时已晚
- azure - Azure DevOps - 发布管道任务引发 Http 超时异常