用于打印特定节的嵌套列表

2024-06-28 19:13:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下嵌套列表

l = [['TEST', ['parent', [], 'uuid', ['"khk-yyas4h-323223-wewe-343er-3434-www"'], 'display_name', ['"services"'], 'IPV4', ['ip', ['"1.1.1.0"'], 'mask', ['20'], 'type', ['ip_mask']], ['ip', ['"2.2.2.2"'], 'mask', ['32'], 'type', ['ip_mask']]]]]]

我正在尝试循环此过程,仅获得以下数据:

1.1.1.0:20
2.2.2.2:32

我一直在想尽一切办法让它发挥作用,但我想不出来


Tags: nametestip列表uuidwwwtypeservice
2条回答

在嵌套列表的str/repr上使用正则表达式


import re

data = [['TEST', ['parent', [], 'uuid', ['"khk-yyas4h-323223-wewe-343er-3434-www"'], 'display_name', ['"services"'], 'IPV4', [['ip', ['"1.1.1.0"'], 'mask', ['20'], 'type', ['ip_mask']], ['ip', ['"2.2.2.2"'], 'mask', ['32'], 'type', ['ip_mask']]]]]]

matches = re.findall(r"\['\"(?P<ip>(?:\d{1,3}\.){3}\d{1,3})\"'\], 'mask', \['(?P<mask>\d{1,2})'\]", str(data))
print([f"{ip}:{mask}" for ip, mask in matches])

输出:

['1.1.1.0:20', '2.2.2.2:32']

如果您这样设置列表的格式,则很容易发现模式:

l = [['TEST',
      ['parent',
       [],
       'uuid',
       ['"khk-yyas4h-323223-wewe-343er-3434-www"'],
       'display_name',
       ['"services"'],
       'IPV4',
       [
           ['ip', ['"1.1.1.0"'], 'mask', ['20'], 'type', ['ip_mask']],
           ['ip', ['"2.2.2.2"'], 'mask', ['32'], 'type', ['ip_mask']]
        ]
       ]
      ]]


l1 = l[0][1][7][0][1][0].strip('"')+':'+\
     l[0][1][7][0][3][0]
l2 = l[0][1][7][1][1][0].strip('"')+':'+\
     l[0][1][7][1][3][0]

print(l1)
print(l2)

输出:

1.1.1.0:20
2.2.2.2:32

您可以看到一种模式,其中只有01是不同的,因此如果(如果这只是实际数据的一部分)想要找到下一个集合,请将该索引更改为2

因此,您可以:

for i in range(len(l[0][1][7])):
    print(l[0][1][7][i][1][0].strip('"')+':'+l[0][1][7][1][3][0])

相关问题 更多 >