gpt4 book ai didi

python - 如何优雅地迭代列表或字典

转载 作者:行者123 更新时间:2023-11-28 21:37:13 25 4
gpt4 key购买 nike

我有一个变量(来自数据库的对象)。在某些情况下,此变量可以是 list 类型,在某些情况下可以是 dictionary

如果变量是list,循环的标准:

for value in object_values:
self.do_something(value)

如果变量是字典,循环的标准:

for key, value in object_values.items():
self.do_something(value)

我可以使用 instanceof() 两次检查类型,但我仍然需要两个函数或 if 和两个 for 循环。我现在有 if 条件调用两个函数之一,一个用于作为列表迭代(例如 iterate_list()),第二个用于作为字典迭代(例如 迭代字典())。

对于我不知道变量是列表还是字典的问题,有没有更好的选择如何优雅和更 pythonic 的方式解决?

最佳答案

在您的情况下,由于数据是字典的项或值,因此您可以使用三元来获取 values() 或只是可迭代的,具体取决于类型:

def iterate(self,object_values):
for value in object_values.values() if isinstance(object_values,dict) else object_values:
self.do_something(value)

如果您传递一个元组、生成器或其他可迭代对象,它会退回到“标准”迭代。如果您传递字典(或 OrderedDict 或其他),它会迭代值。

就性能而言,三元表达式仅在迭代开始时计算一次,所以没问题。

isinstance 位甚至可以被替换为 if hasattr(object_values,"values") 因此即使是具有 values 的非字典对象成员会匹配。

(请注意,您应该了解“最小原子化”原则。有些人可能希望在调用该方法时对字典的键进行迭代)

关于python - 如何优雅地迭代列表或字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50040923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com