为何添加else语句后Python函数立即返回else分支值?
为啥加了else分支就返回空,去掉就正常?我来给你掰明白~
核心问题出在你else分支里的return []上!
你写的这个else逻辑是:只要遍历到任何一个不包含目标key的字典,函数会立刻终止运行,直接返回空列表,完全不会继续检查后面的字典。
举个具体的例子:当你调用call(db, 'd')时,第一个字典{'a':1, 'b': 2, 'c': 3}里没有d,程序马上触发else分支,直接返回[]——连第二个包含d的字典都没机会检查,当然得不到正确结果啦!
而当你把else分支删掉后,函数的逻辑就变成了:
- 逐个遍历所有字典,只把包含目标key的条目(索引+对应值)加入到结果列表里
- 等所有字典都检查完,再返回排序后的结果,这才是你真正想要的“收集所有存在该key的条目”的逻辑
修正后的代码参考
如果你想让逻辑更清晰,可以用更直观的写法(或者直接去掉else就行):
def call(db, key): new = [] for idx, item in enumerate(db): # 用enumerate比range(len(db))更优雅哦 if key in item: new.append((idx, item[key])) return sorted(new)
甚至可以用一行列表推导式搞定:
def call(db, key): return sorted([(idx, d[key]) for idx, d in enumerate(db) if key in d])
这样不管有没有字典不包含目标key,函数都会完整遍历所有元素,收集符合条件的内容后再返回结果~
内容的提问来源于stack exchange,提问作者sparklecoding
相关产品推荐
相关产品推荐

