2014-03-31 49 views
1

我对Python还比较陌生,有时候应该比较简单的东西就是逃避我的。来自字典的Python函数参数列表

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

我有什么flummoxed是使用生成的字典来构造一组关键字参数,然后可以传递给一个函数或方法。到目前为止,我还没有能够做到这一点,更不用说弄清楚什么是最好的/最Python的方法来处理这个问题。该字典可以轻松遍历字典元素并确定键/值对,但我坚持不知道如何在函数或方法调用中将这些对用作一组关键字参数。

谢谢!

+0

你确定字串结果不是'JSON'?有一种更好的方法可以将'JSON'转换为字典然后'eval'。 – cmd

回答

1

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

some_func(**my_dict) 

哪里my_dict是你提到的字典。

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