我正在编写一个连接到思科交换机或路由器的程序,然后检查“显示内容”的输出。然后我处理/解析数据到我有一个二十一字典的点 键/值对。所有值都是整数。它正如我想要的那样工作 到目前为止。
我在查看接下来要做的事情时遇到了一些麻烦,我希望能得到一些想法和/或指导。
我想做的是:
检查每个值。如果ALL值为零,则跳过该字典。 如果任何单个值不为零(如果不是,则为正整数) 零),然后我想将整个字典保存到文件中。
我的程序的每次迭代都会创建一个字典,表示来自交换机或路由器端口的数据。
由于我想要整个字典(所有二十一个键/值对),即使单个值非零,我也不确定是否添加了所有值然后 检查总和是否> 0是最好的选择。
我可能正在检查数千个交换机端口。
在我看来,最好的'将是开始检查值,一旦我达到非零值,然后我想保存整个字典并继续下一个(例如循环通过交换机上的端口),但我只是不确定如何实现这一点。
我很欣赏一些关于如何最好地完成这项任务的想法或例子。
哦,我在使用“最好的”这个词时犹豫不决。由于我将处理数千个端口,我不想要的是一种效率低下的方法,这就是原因所在 我在犹豫要简单地加上所有的值。
我只是不确定如何输入代码:"只要我看到一个非零值 价值,保存整个字典,然后继续下一个"。
答案 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)。