![](/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.