Python中遍历字典取ID调用API仅返回第一个值如何解决
问题根因
你只能获取到第一个ID的核心原因是iterate_over_dict函数中,循环第一次执行就触发了return语句,函数会直接终止运行,不会继续执行后续的循环迭代。
问题解答
1. 字典是否适合当前场景?
完全适合,你的存储结构没有问题,不需要更换数据结构。
2. Python是否支持类似Java的下标遍历方式?
支持,你可以先把字典的值转为列表,之后就可以通过下标从0到n遍历:
# 将字典的所有ID转为列表 id_list = list(account_data.values()) # 用下标遍历,和Java逻辑一致 for i in range(len(id_list)): current_id = id_list[i] # 执行业务逻辑
3. 每次获取新ID都执行get_latest_data的实现方案
这里提供两种常用实现,你可以根据需求选择:
方案一:直接遍历传参(最简洁,推荐)
首先修改get_latest_data,将ID作为入参传入,去掉原来调用迭代方法的逻辑:
def get_latest_data(chosen_id): print('id: ', chosen_id) # 以下原有业务逻辑保持不变 tweets = get_tweets_from_user_id(chosen_id) tweet_id = tweets.id.values[0] tweets = tweets.text.values[0] data = check_for_new_tweet(tweet_id, tweets) if data is not None: print("_________") print('1 ', data)
之后写主逻辑遍历字典,逐个传入ID调用即可:
if __name__ == "__main__": # 不需要用到key的话可以直接遍历values for user_id in account_data.values(): get_latest_data(user_id)
方案二:用生成器封装迭代逻辑(适合迭代逻辑后续会扩展的场景)
如果你需要把迭代逻辑单独封装,可以把原来的return改为yield,生成器会每次返回一个ID,下次迭代从上次结束的位置继续执行,不会直接终止函数:
def iterate_over_dict(): for key, value in account_data.items(): yield value
调用方式如下:
if __name__ == "__main__": for user_id in iterate_over_dict(): get_latest_data(user_id)
内容的提问来源于stack exchange,提问作者Frevelman
相关产品推荐
相关产品推荐

