2014-03-31 47 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