簡體   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