如何优雅遍历可能为列表或字典类型的数据库对象变量
统一处理List/Dict类型变量的遍历逻辑
嘿,这个场景我太熟悉了!处理数据库返回的动态类型结果时经常碰到这种情况,其实我们可以用更简洁的方式来避免重复编写do_something的调用逻辑,不用拆分两个函数或者冗余的if分支。
方案1:先标准化为可迭代的value集合
先把dict的value提取出来,和list统一成同一种可迭代类型,之后只需要写一次遍历逻辑:
# 先统一转换为包含value的可迭代对象 if isinstance(object_values, dict): iterable_values = object_values.values() else: iterable_values = object_values # 统一遍历处理 for value in iterable_values: self.do_something(value)
方案2:封装类型转换为辅助函数
如果这个逻辑在多处用到,把类型判断封装成一个小函数会更优雅,也方便后续扩展(比如以后要支持set等其他可迭代类型):
def extract_values(obj): if isinstance(obj, dict): return obj.values() # 默认返回原对象(适用于list、tuple等可迭代类型) return obj # 主逻辑里直接调用辅助函数 for value in extract_values(object_values): self.do_something(value)
方案3:用三元表达式简化转换
如果追求代码紧凑,也可以用三元表达式一行完成类型转换,让代码更简洁:
iterable_values = object_values.values() if isinstance(object_values, dict) else object_values for value in iterable_values: self.do_something(value)
这些方法的核心思路都是把不同类型的输入标准化为统一的可迭代结构,这样就不用重复编写self.do_something(value)的逻辑了,代码更易维护也更简洁。
内容的提问来源于stack exchange,提问作者Bulva
相关产品推荐
相关产品推荐

