Python中如何将字典列表中的字典逐个返回给其他函数调用?
解决方案
return语句一旦执行就会直接终止整个函数的运行,所以第一次循环拿到第一个字典后函数就直接退出,自然无法返回后续元素。要实现逐个返回元素的需求,使用Python的生成器即可,只需要把return替换为yield关键字。
额外提示:你定义的字典里存在重复的
Status键,Python字典中重复的键会以最后出现的赋值为准,前面的Status: None会被后面的Status: 'NOT'覆盖,如果你是故意这么写的可以忽略。另外注意代码里的F和DONE属于自定义常量,使用前需要提前定义,比如F = False、DONE = "DONE"。
修改后的完整代码
# 提前定义常量,避免运行报错 F = False DONE = "DONE" def data(): iData = [{'Details': [], 'age': None, 'his': F, 'Clear': None, 'Computed': None, 'impact': 0, 'Status': None, 'ID': None, 'bel': None, 'Object': None, 'TicketId': 123, 'service': 257, 'Status': 'NOT', 'Name': 'xyz'}, {'Details': [], 'age': 56, 'his': F, 'Clear': DONE, 'Computed': None, 'impact': 234, 'Status': None, 'ID': None, 'bel': None, 'Object': None, 'TicketId': 456, 'service': 650, 'Status': 'NOT', 'Name': 'xyz'}] for i in iData: # 用yield替代return,把函数变成生成器,逐个返回元素 yield i def return_data(): # 生成器是可迭代对象,直接遍历就能逐个拿到每个字典 for i in data(): # 这里可以对每个字典执行你需要的自定义操作 print("returned i", i) if __name__ == '__main__': return_data()
原理说明
yield关键字会把普通函数变成生成器函数,调用生成器函数会返回一个迭代器,每次迭代的时候会执行到yield位置返回对应的值,暂停函数执行,下次迭代的时候从暂停的位置继续执行,直到所有元素都返回完毕。- 你也可以直接把整个列表返回后在
return_data里遍历,但是用生成器的优势是不需要一次性把所有数据加载到内存,数据量很大的时候内存效率更高。
内容的提问来源于stack exchange,提问作者P.Jhon
相关产品推荐
相关产品推荐

