通过for循环

时间:2017-05-04 15:41:21

标签: python dictionary append

Python 3.6

所有调试输出均来自PyCharm 2017.1.2

我有一个正在处理一个漏洞的程序。

以下是我遇到问题的部分:

def striplist(errlist):
    return [item.strip() for item in errlist]

for line in shintlist:
    errors_list = striplist(line.split(","))

    errRegex = re.compile(r'(\d+)(\s)(\D+)')

    errdict = {}
    for elem in errors_list:
        mo = errRegex.search(elem)
        errdict[mo.group(3)] = int(mo.group(1))
        if int(mo.group(1)) > 0:
            print("There are errors")
        else:
            print("There are no errors")

    print(errdict)

**注意**打印报表仅供我此时使用 检查程序逻辑。它们将在稍后删除。

执行这些说明时,' shintlist' 是逗号分隔字符串的列表。

__len__ = {int} 9
0 = {str} '     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored'
1 = {str} '     0 watchdog'
2 = {str} '     0 input packets with dribble condition detected'
3 = {str} '     5912 packets output, 738736 bytes, 0 underruns'
4 = {str} '     0 output errors, 0 collisions, 2 interface resets'
5 = {str} '     4 unknown protocol drops'
6 = {str} '     0 babbles, 0 late collision, 0 deferred'
7 = {str} '     0 lost carrier, 0 no carrier'
8 = {str} '     0 output buffer failures, 0 output buffers swapped out'

以上代码有效。它正确分裂了','然后剥离 离开白色空间。然后它创建一个字典键:值 输入errdict {}:

errdict = {dict} {'input errors': 0}
 __len__ = {int} 1
 'input errors' (64451912) = {int} 0

我陷入困境的是:每次迭代时,errdict {}都会被覆盖 使用来自' shintlist'。

的下一行

我想做的是:

如果每个单个项目的每个值都为零(0):     if int(mo.group(1))> 0: 然后跳过这个界面。如果任何一个值大于零则 我想要字典' errdict {}'包含以上所有行 来自' shintlist'所以我有一个包含所有内容的字典。

**注2 **这些条目:5912包输出,738736字节,将始终 对于活动接口,它不为零。我稍后会处理这些问题。

当' shintlist'中的每一行时,这些行中的每一行都是errdict {}的状态。 处理完毕:

{'input errors': 0, 'CRC': 0, 'frame': 0, 'overrun': 0, 'ignored': 0}
{'watchdog': 0}
{'input packets with dribble condition detected': 0}
{'packets output': 6304, 'bytes': 786190, 'underruns': 0}
{'output errors': 0, 'collisions': 0, 'interface resets': 2}
{'unknown protocol drops': 4}
{'babbles': 0, 'late collision': 0, 'deferred': 0}
{'lost carrier': 0, 'no carrier': 0}
{'output buffer failures': 0, 'output buffers swapped out': 0}

如果有任何单个值,我想要一个包含所有行和值的字典 非零,所以我可以打印一个显示所有接口有错误的报告。

除非我离开,否则我会问如何追加每一行 errdict {}而不是覆盖?

谢谢。

1 个答案:

答案 0 :(得分:0)

问题在于第9行示例代码 - 您在errdict循环的每次迭代中将for line...重新初始化为空字典。您希望在该循环的顶部初始化它,即在示例代码的第3行初始化它。