我有以下嵌套列表
[['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
我一直在想尽办法让这件事顺利进行,但还是搞不清楚
你的帖子中少了几个括号,下面是更正后的列表:
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
您可以看到只有0
和1
不同的模式,因此如果您(如果这只是实际数据的一部分)想要查找下一个集合,请将该索引更改为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']