繁体   English   中英

Python:在for循环中追加到字典

[英]Python: Append to dictionary in for loop

尝试使用Linux fio命令的输出填充字典时,出现意外结果。

with open('normal_output.txt', 'rb') as f:
    for line in f.readlines():
        d = {}

        if ':' not in line:
            continue
        print("LINE: ", line)
        key, value = line.strip().split(':', 1)
        d[key] = value

我希望字典中充满KVP,例如:

('KEY: ', 'READ')
('VALUE: ', ' io=131220KB, aggrb=13890KB/s, minb=13890KB/s, maxb=13890KB/s, mint=9447msec, maxt=9447msec')
('KEY: ', 'WRITE')
('VALUE: ', ' io=130924KB, aggrb=13858KB/s, minb=13858KB/s, maxb=13858KB/s, mint=9447msec, maxt=9447msec')
('KEY: ', 'Disk stats (read/write)')
('VALUE: ', '')
('KEY: ', 'sda')
('VALUE: ', ' ios=32642/32600, merge=0/12, ticks=7472/936, in_queue=8392, util=88.18%')
{'sda': ' ios=32642/32600, merge=0/12, ticks=7472/936, in_queue=8392, util=88.18%'}

但是,相反,我只是获得了最后一个KVP:

{'sda': ' ios=32642/32600, merge=0/12, ticks=7472/936, in_queue=8392, util=88.18%'}

我尝试了d [key] .append(value),但这给了我:KeyError:'fio_test'

在循环中,您将创建一个新的空字典d 将其移至for循环之外。

with open('normal_output.txt', 'rb') as f:
    for line in f.readlines():
        d = {}
        # do work

with open('normal_output.txt', 'rb') as f:
    d = {}
    for line in f.readlines():
        # do work

您甚至可以将词典创建移至上下文管理器( with语句)之外,以使逻辑更好地组织,但这更多的是口味和样式问题。

您正在for循环中实例化字典,因此每次循环时都将覆盖字典。 将d = {}带到for循环之外

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM