繁体   English   中英

Python - For 循环不遍历字典的多个实例

[英]Python - For Loop not iterating through multiple instances of a dictionary

我有以下代码

 def generate_matter(leaver_user,vaultAccessToken): for user in leaver_user: url = "https://vault.googleapis.com/v1/matters/" headers = { "Accept": "application/json", "Content-Type": "application/json", "Authorization": "Bearer " + vaultAccessToken } body = json.dumps ({ "state": "OPEN", "description": "Generated by Python", "name": user + "'s archive" }) response = requests.request( "POST", url, headers=headers, data=body ) jsonContent = json.loads(response.text) matterID=jsonContent["matterId"] #print("Matter ID for " + user + " is " + matterID) #print(jsonContent) matter={ "matterInstance": { "user": user, "userInfo": { "matterID": matterID } } } return matter def generate_search_query(matter,leaver_user,vaultAccessToken): print(matter) for key, value in matter.items(): user=(matter['matterInstance']['user']) matterID=(matter['matterInstance']['userInfo']['matterID']) url = "https://vault.googleapis.com/v1/matters/"+matterID+"/savedQueries" headers = { "Accept": "application/json", "Content-Type": "application/json", "Authorization": "Bearer " + vaultAccessToken } body=json.dumps({ "displayName": user + "'s email search query", "query": { "corpus": "MAIL", "dataScope": "ALL_DATA", "searchMethod": "ACCOUNT", "accountInfo": { "emails": [user]}, "mailOptions": {"excludeDrafts": "false"}, "timeZone": "Atlantic/Canary", "method": "ACCOUNT" }} ) response = requests.request( "POST", url, headers=headers, data=body ) jsonContent = json.loads(response.text) print(matterID) print(body) print(jsonContent) savedQueryID=jsonContent["savedQueryId"] print("savedQueryId for " + user + " is " + savedQueryID + " matterID is " + matterID) matter={ "matterInstance": { "user": user, "userInfo": { "matterID": matterID, "savedQueryID": savedQueryID } } } return matter matter=generate_matter(leaver_user,vaultAccessToken) savedQueryID=generate_search_query(matter,leaver_user,vaultAccessToken)

有效的是第一个 function - generate_matter()。

这将返回多个物质实例,例如

 {'matterInstance': {'user': 'testing.testing@domain.com', 'userInfo': {'matterID': '12-34-56-78-91'}}} {'matterInstance': {'user': 'adtesting@domain.com', 'userInfo': {'matterID': '12-34-56-78-99'}}}

然而 function generate_search_query() 似乎只在第一个实例上执行。

我已经通过在 for 循环执行之前在 generate_search_query() 中打印这个问题来确认这一点,并且只返回第一个问题实例。

 {'matterInstance': {'user': 'testing.testing@domain.com', 'userInfo': {'matterID': '12-34-56-78-91'}}}

从下面的评论中添加它的有用信息。

在 generate_matter 的 for 循环中打印物质确实会返回多个物质实例。

在调用 savedQueryID=generate_search_query(matter,leaver_user,vaultAccessToken) 之前立即打印事物只返回一个事物实例,所以这是我在 function 之外打印/调用它的时候

我将如何解决这个问题,以便在 generate_search_query() 的 for 循环中执行多个物质实例?

谢谢

generate_matter()结束时,您将使用最后一次迭代覆盖matter ,然后返回它,因此它只返回一个元素。

要解决此问题,请在generate_matter() ( matterList = [] ) 的开头创建一个列表,然后在generate_matter()中有matter={...}的地方将其替换为matterList.append({...}) 然后在 function 结束时返回matterList而不是matter

generate_search_query()中,您需要将所有内容包装在另一个for循环中以遍历列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM