Python中for循环内布尔标识为何无法正确生效?
问题分析与解决
你的问题出在first = True的位置——它被放在了外层for stype in hi循环的内部,每次遍历新的字典时,first都会被重新设为True。而你的列表hi里每个字典都只有一个键值对,内层for typ in keys循环每次只执行一次,自然永远走if first的分支,根本没机会触发else。
要实现“第一个值带Value! ,后续仅打印值”的需求,你需要把first = True移到外层循环的外面,让这个标识在整个遍历过程中只初始化一次:
修正后的代码:
hi = [{"item1": "one"}, {"item2": "two"}] first = True # 移到外层循环外面 for stype in hi: keys = list(stype.keys()) for typ in keys: if first: print("Value! ", stype.get(typ)) first = False else: print("\t", stype.get(typ))
运行这段代码会输出:
Value! one two
如果你的列表里有包含多个键的字典(比如hi = [{"item1": "one", "item3": "three"}, {"item2": "two"}]),修正后的代码也能正确处理:第一个键输出带Value! ,同一个字典里的后续键以及下一个字典的键都会缩进打印。
内容的提问来源于stack exchange,提问作者bananasForCode
相关产品推荐
相关产品推荐

