我想构建一个dicts的词典。
我正在提取\处理输出。我的输出正是我想要的方式:
来自PyCharm的代码段和结果列表
ssh_channel.send("show client detail 00:e0:4c:14:dd:78" + "\n")
time.sleep(0.9)
outp = ssh_channel.recv(100000)
shclisumstring = outp.decode("utf-8")
shclisumlist = shclisumstring.splitlines()
del shclisumlist[:1]
del shclisumlist[4:107]
del shclisumlist[6:]
shclisumlist[3] = shclisumlist[3].strip()
shclisumlist[4] = shclisumlist[4].strip()
shclisumlist[5] = shclisumlist[5].strip()
<class 'list'>: ['Client MAC Address............................... 00:e0:4c:14:dd:78',
'Client Username ................................. N/A',
'AP MAC Address................................... 40:01:7a:80:44:40',
'AP Name.......................................... AP1880.9025.f874',
'Radio Signal Strength Indicator............ -53 dBm',
'Signal to Noise Ratio...................... 47 dB']
我最终将迭代所有客户端,每个客户端将生成相同的六行输出。我现在正在做一个直接的逻辑。
此时我想填写一个看起来像这样的词典:
{'Client 1': {'Client MAC Address': '00:e0:4c:14:dd:78',
'Client Username': 'N/A',
'AP MAC Address': '40:01:7a:80:44:40',
'AP Name': 'AP1880.9025.f874',
'Radio Signal Strength Indicator': -53 dBm',
'Signal to Noise Ratio': 47 dB'
}
对于客户端2,客户端3等,将重复相同的模式
这是我的代码(部分):
from collections import defaultdict
d = defaultdict(dict)
while shclisumlist:
ccounter = 1
Client = 'Client ' + str(ccounter)
for line in shclisumlist:
regex = re.compile(r'(.+?)(?:\.+?\s)(.*)')
mo = regex.search(line)
d[Client] = ({mo.group(1): mo.group(2)}) <== Overwriting, not appending
正则表达式工作,dict填充第一个键:值对,但我的代码的最后一行是覆盖内部字典而不是添加(附加?)。
每次迭代都会将现有的dict条目替换为下一个。如何附加内部字典?
这是第四次迭代后的状态:
d = {defaultdict}defaultdict(<class 'dict'>, {'Client 1': {'AP Name': 'AP1880.9025.f874'}})
答案 0 :(得分:0)
走了一会儿又回来了。这解决了这个问题:
while shclisumlist:
ccounter = 1
Client = 'Client ' + str(ccounter)
for line in shclisumlist:
regex = re.compile(r'(.+?)(?:\.+?\s)(.*)')
mo = regex.search(line)
d[Client].update({mo.group(1): mo.group(2)})