来自字典的Python函数参数列表

时间:2014-03-31 20:21:34

标签: python dictionary

我仍然相对较新的Python,有时候应该相对简单的东西让我感到厌烦。

我将POST操作的结果存储到数据库表中,作为格式化为字典定义的字符串。我然后使用该值并使用eval()将其转换为实际的dict对象,这样做很有效,因为它保留了字典数据的数据类型(日期,日期时间,整数,浮点数,字符串等)元件。

让我感到困惑的是使用生成的字典来构造一组关键字参数,然后可以将这些参数传递给函数或方法。到目前为止,我还没有能够完成这项工作,更不用说弄清楚最好/最恐怖的方法了。字典可以很容易地迭代字典元素并识别键/值对,但我不知道如何在函数或方法调用中使用这些对作为一组关键字参数。

谢谢!

3 个答案:

答案 0 :(得分:4)

我认为您只是在寻找func(**the_dict)

Understanding kwargs in Python

答案 1 :(得分:1)

您正在寻找**kwargs。它将字典解压缩为关键字参数,就像你想要的那样。在函数调用中,只需使用:

some_func(**my_dict)

my_dict是你提到的词典。

答案 2 :(得分:0)

@tzaman和@Alex_Thornton - 谢谢 - 你的回答让我得到了解决方案,但你的回答并不清楚,在功能调用中使用**kwargs,而不是功能定义。我花了一段时间来弄清楚这一点。我之前只看过函数/方法定义中使用的**kwargs,所以这个用法对我来说是新的。 @tzaman所包含的链接触发了“aha”时刻。

以下是实现解决方案的代码:

def do_it(model=None, mfg_date=None, mileage=0):
    # Proceed with whatever you need to do with the 
    # arguments
    print('Model: {} Mfg date: {} Mileage: {}'.format(model, mfg_date, mileage)

dict_string = ("{'model':'Mustang,"
               "'mfg_date':datetime.datetime.date(2012, 11, 24),"
               "'mileage':23824}")

dict_arg = eval(dict_string)

do_it(**dict_arg)  # <---Here is where the **kwargs goes - IN THE CALL