【发布时间】:2017-05-06 01:12:04
【问题描述】:
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 = {dict} {'input errors': 0}
__len__ = {int} 1
'input errors' (64451912) = {int} 0
我遇到的问题是:每次迭代都会覆盖 errdict{} 'shintlist' 的下一行。
我想做的是:
如果每个单个项目的每个单个值都为零 (0): 如果 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{} 而不是覆盖?
谢谢。
【问题讨论】:
-
dkv,我欠你一杯啤酒!!这是一项正在进行的工作,我的程序的先前版本更加“线性”——逻辑没有使用循环:我只是用一行测试以确保函数和列表理解有效。然后我添加了循环并将 errdict{} 放入循环中。我在这方面基本上还是个新手,所以... 吸取教训。再次,非常感谢。我非常感激。顺便说一句,我刚刚实施了你的修复,我得到了正确的、想要的结果。
-
很高兴它有帮助。将我的评论移至答案,因为这是您要查找的内容。
标签: python dictionary append