尝试基于变量键递增字典值

时间:2014-06-30 21:11:28

标签: python dictionary

好吧,我正在尝试编写一个脚本,该脚本将运行生成的报告,并为我提供每种漏洞类型的行数。由于xml的格式化方式,我试图在遇到漏洞类型时使用变量来设置字典密钥,然后只增加该密钥的值,直到它到达该部分的末尾。

我认为我遇到了如何增加变量定义的键值的问题。这就是我到目前为止所做的。

#!/usr/bin/python

file = open('Test.xml','r')

vulns = {4:0, 3:0, 2:0, 1:0}
pos = 0

for line in file:

    if line.find('Critical') != -1:
            pos = 4

    if line.find('High') != -1:
            pos = 3

    if line.find('Medium') != -1:
            pos = 2

    if line.find('/Chart1_CategoryGroup1_Collection') != -1:
            pos = 1

    if line.find('Chart1_CategoryGroup1 Label=') != -1:
            vulns[pos] = vulns[pos] + 1

for i in vulns.values():
    print i

当我尝试运行脚本时,它会重新启动

Traceback (most recent call last):
  File "./vulnReport.py", line 23, in <module>
  vulns[pos] = vulns[pos] + 1
KeyError: 0

2 个答案:

答案 0 :(得分:2)

if line.find('Chart1_CategoryGroup1 Label=') != -1:
            vulns[pos] = vulns[pos] + 1

pos更新为0以外的值之前执行,并且您的dict不包含0条目。

即,执行

vulns[0] = vulns[0] + 1

答案 1 :(得分:0)

您可能会发现以下版本更易于使用和维护:

#! /usr/bin/env python

import itertools

search = ('Critical',
          'High',
          'Medium',
          '/Chart1_CategoryGroup1_Collection',
          'Chart1_CategoryGroup1 Label=')

counts = dict.fromkeys(search, 0)

with open('Test.xml') as file:
    for line, item in itertools.product(file, search):
            counts[item] += item in line

for pair in sorted(counts.items()):
    print('{!s}: {!r}'.format(*pair))