簡體   English   中英

如何將多個字典項傳遞到 function 並返回一個列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM