Python:检查嵌入式交互对象中的现有条目

问题描述

我有一个元组。我想遍历每个嵌套的元组,但是我想检查它是否已经添加到其他列表中(检查基于IP的重复项)。如果尚未添加,我想将整个嵌套元组内容添加到新列表中。

我想我知道它没有按照我的计划做,因为我需要检查新列表中每个嵌套元组的IP,以查看其是否重复,但是我不知道如何检查内部的嵌套元素。新列表。

example = (('ROUTER1','17.2.155.224','WS-C3850-48T-E'),('ROUTER2','27.24.251.212',('ROUTER3','WS-C3850-48T-E'))

new_list = []

for item in example:
    if item[1] in new_list:
       pass
    else:
       new_list.append(item)
        
print(new_list)

解决方法

使用字典而不是列表,因此检查重复的IP将更加容易和有效。

字典键是IP,值是元组。

example = (('ROUTER1','17.2.155.224','WS-C3850-48T-E'),('ROUTER2','27.24.251.212',('ROUTER3','WS-C3850-48T-E'))

new_dict = dict()

for item in example:
    # Checking if an IP already been added
    if item[1] in new_dict.keys():
        pass
    else:
        # Adding a new entry to the dictionary => < IP : tuple >
        new_dict[item[1]] = item

print(new_dict.values())
,

有两种方法可以做到这一点。

选项1:

您可以在自己的循环中使用列表理解。这样可以保留您当前使用的结构,并且不会添加新变量,但是会增加时间复杂度。

example = (('ROUTER1','WS-C3850-48T-E'))

new_list = []

for item in example:
    if item[1] in [elm[1] for elm in new_list]:
        pass
    else:
        new_list.append(item)

print(new_list)

选项2

这种方式引入了一个新变量,但速度更快,因为您不必在每次迭代时都通过变量循环一个额外的集合。

example = (('ROUTER1','WS-C3850-48T-E'))

new_list = []
found = []

for item in example:
    if item[1] in found:
        pass
    else:
        new_list.append(item)
        found.append(item[1])

print(new_list)