繁体   English   中英

解开字典并将其作为关键字参数传递给函数

[英]Unpacking a dictionary and passing to a function as keyword parameters

我正在尝试在python中将一些字典打包成一些函数:

我有一个将packet作为参数的函数(应该是字典)

def queue(self, packet):
    self.topic.publish(self.message, self.client, **packet)

我这样称呼它:

queue({
        'an_item': 1,
        'a_key': 'value'
    })

发布功能在第3方api (Google Pub / Sub API)中以及从我查看的源中得出:

def publish(self, message, client=None, **attrs):
    ...
    message_data = {'data': message, 'attributes': attrs}
    message_ids = api.topic_publish(self.full_name, [message_data])

它接受** attrs以便将所有关键字参数传递给另一个函数。

目前..我的queue()函数无法正常工作。

如果可能的话,如何修复我的queue()函数以将packet dict参数解packetpublish()会接受的东西?

谢谢!


编辑:

我收到一些错误消息。

对于:

def queue(self, packet):
    self.topic.publish(self.message, self.client, **packet)

我得到: TypeError: 1 has type <class 'int'>, but expected one of: (<class 'bytes'>, <class 'str'>)


对于:

def queue(self, packet):
    self.topic.publish(self.message, self.client, packet)

我得到: publish() takes from 2 to 3 positional arguments but 4 were given


对于:

def queue(self, **packet):
    self.topic.publish(self.message, self.client, packet)

我得到: TypeError: queue() takes 1 positional argument but 2 were given


对于:

def queue(self, *packet):
    self.topic.publish(self.message, self.client, packet)

我得到: TypeError: publish() takes from 2 to 3 positional arguments but 4 were given


编辑2:

正如@gall正确建议的那样,它是我正在发送的数据,并且解压缩没有问题。 具有此功能:

def queue(self, packet):
    self.topic.publish(self.message, self.client, **packet)

当我仅使用字符串调用它时,它可以工作:

queue({
        'an_item': '1',
        'a_key': 'value'
    })

谢谢你们!

根据publish的文档字符串, attr必须是string -> string字典。

您可以通过替换来解决此问题

queue({
    'an_item': 1,
    'a_key': 'value'
})

具有纯字符串参数,例如

queue({
    'an_item': '1',
    'a_key': 'value'
})

看来您的问题与字典解包无关。

暂无
暂无

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

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