简体   繁体   English

从另一个列表替换 Python 列表中的项目

[英]Replace items in a Python list from another list

Lets say I have two lists,假设我有两个列表,

l1 = ['Join', 'logsource1.selection1', 'and', 'logsource2.selection3', 'AND', '((logsource1.selection2', '<=', 'contraint1)', 'AND', '(logsource2.selection4', '<=', 'constraint1))']
l2 = ['logsource1=Zscaler/Proxy', 'logsource2=Proofpoint/TAP']

How do I take the values from l2 and replace in l1, something like this,如何从 l2 中获取值并在 l1 中替换,类似这样,

l3 = ['Join', 'Zscaler/Proxy.selection1', 'and', 'logsource2=Proofpoint/TAP.selection3', 'AND', '((Zscaler/Proxy.selection2', '<=', 'contraint1)', 'AND', '(Proofpoint/TAP.selection4', '<=', 'constraint1))']

Try:尝试:

l2 = list(map(lambda x: x.split("="), l2))

def func(arr, el):
    if(len(el)==0):
        return list(arr)
    else:
        return func(map(lambda x: x.replace(*el[0]), arr), el[1:])

l1=func(l1, l2)

Outputs:输出:

>>> l1

['Join', 'Zscaler/Proxy.selection1', 'and', 'Proofpoint/TAP.selection3', 'AND', '((Zscaler/Proxy.selection2', '<=', 'contraint1)', 'AND', '(Proofpoint/TAP.selection4', '<=', 'constraint1))']

Using a helping dictionary should do the trick:使用帮助字典应该可以解决问题:

l1 = ['Join', 'logsource1.selection1', 'and', 'logsource2.selection3', 'AND', '((logsource1.selection2', '<=', 'contraint1)', 'AND', '(logsource2.selection4', '<=', 'constraint1))']
l2 = ['logsource1=Zscaler/Proxy', 'logsource2=Proofpoint/TAP']

l_help = {split_result[0]: split_result[1] for split_result in [e.split("=") for e in l2]}

l3 = l1.copy()

for key, value in l_help.items():
    l3 = [e.replace(key, value) for e in l3]

Output is: Output 是:

['Join', 'Zscaler/Proxy.selection1', 'and', 'Proofpoint/TAP.selection3', 'AND', '((Zscaler/Proxy.selection2', '<=', 'contraint1)', 'AND', '(Proofpoint/TAP.selection4', '<=', 'constraint1))']

You can try with this你可以试试这个

l1 = ['Join', 'logsource1.selection1', 'and', 'logsource2.selection3', 'AND', '((logsource1.selection2', '<=', 'contraint1)', 'AND', '(logsource2.selection4', '<=', 'constraint1))']
l2 = ['logsource1=Zscaler/Proxy', 'logsource2=Proofpoint/TAP']
l3=[]
for i in l1:
    for j in l2:
        k,v=j.split("=")
        if k in i:
            l3.append(i.replace(k,v))
            break
    else:
        l3.append(i)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM