首页 > 解决方案 > 如何为列表中的重复值获取相同的值

问题描述

我有 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']

你能给我一些线索或提示吗?

标签: pythonlist

解决方案


您可以使用映射字典来跟踪每个非关键字映射到的名称:

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']

推荐阅读