填充(附加)dicts的词典

时间:2018-04-08 14:12:56

标签: dictionary python-3.6 defaultdict

我想构建一个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'}})

1 个答案:

答案 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)})