提问者:小点点

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


我有以下嵌套列表

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

我一直在想尽办法让这件事顺利进行,但还是搞不清楚


共2个答案

匿名用户

你的帖子中少了几个括号,下面是更正后的列表:

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

匿名用户

对嵌套列表的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{2})'\]", str(data))
print([f"{ip}:{mask}" for ip, mask in matches])

输出:

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