繁体   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