我正在编写一个程序,该程序连接到Cisco交换机或路由器,然后检查“ show int”的输出。然后,我将数据处理/解析到拥有二十一个字典的地步
键/值对。所有值都是整数。它完全按照我的要求工作
到这一点。

我在想下一步要做什么时遇到了一些麻烦,希望能得到一些想法和/或指导。

我想做的是这样的:

检查每个值。如果所有值均为零,则跳过该词典。
  如果ANY单个值非零(如果不是,则为正整数)
  零),那么我想将整个字典保存到文件中。

我程序的每次迭代都会创建一个字典,该字典代表来自交换机或路由器端口的数据。

因为我想要整个字典(所有二十一个键/值对),即使单个值也不为零,所以我不确定是否要添加所有值,然后
检查总和是否大于0是最佳选择。

我可能正在检查数千个交换机端口。

在我看来,“最佳”将是开始检查值,当我击中非零值时,我想保存整个字典并继续进行下一个字典(例如,遍历交换机上的端口) ),但我不确定如何实现这一目标。

我将对如何最好地完成此任务的一些想法或示例表示赞赏。

哦,我很犹豫地使用“最佳”一词。由于我将处理数千个端口,因此我不希望使用效率低下的方法,这就是为什么
我很想简单地将所有值加起来。

我只是不确定如何输入代码:“一旦我看到一个非零的值
值,保存整个字典,然后继续进行下一个”。

最佳答案

这是请求的直接翻译,从您已经完成的部分开始工作,并将应用于字典any()values函数合并。

# I am in the process of writing a program that connects to a Cisco switch or
# router and then examines the output of a 'show int '. I then process\parse the
# data to the point where I have a dictionary of twenty-one key\value pairs.
# All values are integers.
for device in devices:
    s = run_show_interfaces(device)
    d = preprocess_parse(s)

    # Check each value. If ALL values are zero, then skip that dictionary. If ANY
    # single value is non-zero (it will be a positive integer if it is not zero),
    # then I want to save to a file the entire dictionary.
    if any(d.values()):
        filename = os.path.join(device, '.txt')
        with open(filename, 'w') as f:
            json.dump(d, f)


仅供参考,any()函数具有提前退出功能,一旦找到非零值,它将停止查找。在Python 3中,values()返回数据视图,因此它不会复制所有信息。在Python 2中,使用viewvalues()可以达到相同的效果。两者合计,将为您带来出色的性能。

关于python - 检查字典中的非零值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43826775/

10-13 07:46
查看更多