如何正确遍历Python字典中每个键对应的列表值?
问题原因
你的代码问题出在计数器counter的作用域错误:
- 你把
counter初始化在了外层遍历字典的for循环外部,第一次处理ch1对应的列表时,counter从0开始累加,直到值等于2(ch1对应列表长度为2),退出while循环。 - 当循环进入下一轮处理
ch2时,counter的值仍然是2,没有被重置为0,此时判断2 < 3(ch2对应列表长度为3)条件成立,直接读取val[2]也就是testmsg5打印,随后counter累加为3,不满足循环条件直接退出,因此只会打印ch2的最后一个元素。
修复方法
方法1:调整计数器位置
把计数器的初始化放到for循环内部,每次处理新的键值对时都把计数器重置为0即可:
msgs = {} msgs['ch1']=['testmsg1', 'testmsg2'] msgs['ch2']=['testmsg3','testmsg4','testmsg5'] for key, val in msgs.items(): counter = 0 # 每次遍历新键时重置计数器 while counter < len(val): print(key, val[counter]) counter += 1
方法2:更符合Python习惯的写法
Python中遍历列表不需要手动维护索引计数器,直接迭代列表元素即可,代码更简洁也不容易出错:
msgs = {} msgs['ch1']=['testmsg1', 'testmsg2'] msgs['ch2']=['testmsg3','testmsg4','testmsg5'] for key, val in msgs.items(): for item in val: print(key, item)
运行上述任意一段代码,都能得到你期望的输出:
ch1 testmsg1 ch1 testmsg2 ch2 testmsg3 ch2 testmsg4 ch2 testmsg5
内容的提问来源于stack exchange,提问作者livisaur
相关产品推荐
相关产品推荐

