![](/img/trans.png)
[英]How do I pass a list response into a Python dictionary and add items only if it does not already exist?
[英]How do I pass multiple dictionary items into a function and return a list?
使用变量results
调用 API :
results = service.users().messages().list(userId='me', labelIds=['INBOX', 'UNREAD']).execute()
返回一个字典:
{'messages': [{'id': '182f01f99c14b435', 'threadId': '182ef213b5174c23'}, {'id': '182f0120c66cc135', 'threadId': '182ef214b5174c23'}], 'resultSizeEstimate': 2}
将空白列表和结果传递给 function:
message_list = []
def return_message(message_list, results):
messages_ = results.get('messages', [])
for message in messages_:
for k,v in message.items():
message_list.append(message)
return message_list
运行 function 但我只能返回 1 条附加消息:
return_message(message_list, results)
print(message_list)
[{'id': '182f01f88c14b435', 'threadId': '182ef213b5154c23'}]
如何返回从 function 开始传入的全部results
,以便将其全部附加到message_list
?
因为您在append
进入您的列表之后立即return
。 return
终止 function。 因此,在第一次迭代中,您添加一个项目,然后 function 返回。
将其更改为:
def return_message(message_list, results):
messages_ = results.get("messages", [])
for message in messages_:
for k, v in message.items():
message_list.append(message)
# return message_list
return message_list
for message in messages_:
for k,v in message.items():
message_list.append(message)
return message_list
显式return
语句立即终止 function 执行并将返回值发送回调用者代码。 由于return
语句位于for loop
内,因此它在循环的第一次迭代中终止。
要获取完整列表,return 语句应位于for loop
之外,如下所示:
for message in messages_:
for k,v in message.items():
message_list.append(message)
return message_list
这里要注意的第二点是嵌套for loop
在这里实际上并没有做任何事情(假设这是完整的代码)。 因此在此处调用.append()
方法会在列表中插入相同的消息两次。
您可以通过检查条件语句或完全删除第二个 for 循环来解决此问题。
for message in messages_:
message_list.append(message)
return message_list
您可以简单地使用extend()
方法,甚至可以连接列表,因为变量的 bot 是列表。
使用extend()
message_list.extend(messages_)
连接
message_list += messages_
两者都会给出相同的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.