检查字典中的非零值

时间:2017-05-07 00:50:04

标签: python dictionary python-3.6

我正在编写一个连接到思科交换机或路由器的程序,然后检查“显示内容”的输出。然后我处理/解析数据到我有一个二十一字典的点 键/值对。所有值都是整数。它正如我想要的那样工作 到目前为止。

我在查看接下来要做的事情时遇到了一些麻烦,我希望能得到一些想法和/或指导。

我想做的是:

检查每个值。如果ALL值为零,则跳过该字典。   如果任何单个值不为零(如果不是,则为正整数)   零),然后我想将整个字典保存到文件中。

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

由于我想要整个字典(所有二十一个键/值对),即使单个值非零,我也不确定是否添加了所有值然后 检查总和是否> 0是最好的选择。

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

在我看来,最好的'将是开始检查值,一旦我达到非零值,然后我想保存整个字典并继续下一个(例如循环通过交换机上的端口),但我只是不确定如何实现这一点。

我很欣赏一些关于如何最好地完成这项任务的想法或例子。

哦,我在使用“最好的”这个词时犹豫不决。由于我将处理数千个端口,我不想要的是一种效率低下的方法,这就是原因所在 我在犹豫要简单地加上所有的值。

我只是不确定如何输入代码:"只要我看到一个非零值 价值,保存整个字典,然后继续下一个"。

2 个答案:

答案 0 :(得分:2)

以下是请求的直接翻译,使用您已经完成的部分,并将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()来实现相同的效果。总而言之,这将为您提供出色的表现。

答案 1 :(得分:-1)

如果所有非零键具有相同的值,则可以执行dict.get(x),如果x不在字典中,则它将不返回任何值。

否则:

    for value in dict.values():
      if value != 0:
        return true
    return false

在所有值都非零的情况下,你可能还想先做一个dict.get(0)。