【问题标题】:Python: Checking for existing entries in an embedded interablePython:检查嵌入式迭代中的现有条目
【发布时间】:2020-12-14 04:28:28
【问题描述】:

我有一个元组。我想遍历每个嵌套元组,但我想检查它是否已被添加到不同的列表中(根据 IP 检查重复项)。如果尚未添加,我想将整个嵌套元组的内容附加到新列表中。

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

example = (('ROUTER1', '17.2.155.224', 'WS-C3850-48T-E'),('ROUTER2', '27.24.251.212', 'WS-C3850-48T-E'),('ROUTER3', '27.24.251.212', '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)

【问题讨论】:

  • 您可以使用另一个名为 dups 的列表,您将在其中存储所有迭代的 IP 地址。

标签: python list tuples iteration


【解决方案1】:

使用字典而不是列表,这样检查重复 IP 会更容易、更有效。

字典键是 IP,值是元组。

example = (('ROUTER1', '17.2.155.224', 'WS-C3850-48T-E'), ('ROUTER2', '27.24.251.212', 'WS-C3850-48T-E'),
           ('ROUTER3', '27.24.251.212', '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())

【讨论】:

  • 这对 Aviv 有效,谢谢。我选择下面的答案作为解决方案,因为它不需要我重新处理下一个函数,我必须使用字典而不是列表(实际上是 3 个列表)。
【解决方案2】:

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

选项 1:

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

example = (('ROUTER1', '17.2.155.224', 'WS-C3850-48T-E'), ('ROUTER2', '27.24.251.212', 'WS-C3850-48T-E'),
           ('ROUTER3', '27.24.251.212', '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', '17.2.155.224', 'WS-C3850-48T-E'), ('ROUTER2', '27.24.251.212', 'WS-C3850-48T-E'),
           ('ROUTER3', '27.24.251.212', '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)

【讨论】:

    猜你喜欢
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2012-01-23
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多