Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过for循环向字典添加元素_Python_Dictionary_Append - Fatal编程技术网

Python 通过for循环向字典添加元素

Python 通过for循环向字典添加元素,python,dictionary,append,Python,Dictionary,Append,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+)')

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'
上述代码有效。它正确地在面板上拆分,然后剥离 在空白处。然后创建一个字典键:value errdict{}中的条目:

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{}代替覆盖


谢谢。

问题出在示例代码的第9行中-在
for line…
循环的每次迭代中,您都将
errdict
初始化为空字典。您想在循环的顶部初始化它,而不是在示例代码的第3行。

dkv,我欠您一杯啤酒!!这是一项正在进行的工作,我的程序的前一个版本更“线性”——逻辑没有使用循环:我只是用一行代码进行测试,以确保函数和列表理解工作正常。然后我添加了循环,并将errdict{}放入循环中。我基本上还是个新手,所以。。。吸取的教训。再次感谢大家。我非常感激。顺便说一句,我刚刚实施了你的修复,我得到了正确的,期望的结果。很高兴它有帮助。把我的评论转移到一个答案上来,因为这正是你想要的。