2015-11-18 69 views
0

我想下面是否有可能使用python在函數內部創建一個字典?

def myfunction(list_a, list_b, my_dict): 
    dict1 = dict(zip(list_a, list_b)) 
    my_dict = copy.deepcopy(dict1) 

,但是當我打電話的MyFunction我得到一個emtpty字典...

+0

預期會返回一個值嗎? –

+0

你需要一個'return'。 – economy

+0

你是否在調用這個函數,期望你用作參數'my_dict'的引用來包含這個副本?如果是這樣,它不會。參數通過對象引用的值傳遞 –

回答

2
def myfunction(list_a, list_b): 
    dict1 = dict(zip(list_a, list_b)) 
    return copy.deepcopy(dict1) 

my_dict = myfunction(some_list_a, some_list_b) 

爲MaxNoe注意到 - 不需要deepcopy的

def myfunction(list_a, list_b): 
    return dict(zip(list_a, list_b)) 

my_dict = myfunction(some_list_a, some_list_b) 

或即使

my_dict = dict(zip(some_list_a, some_list_b)) 
+1

你爲什麼要製作一個你剛創建的對象的深層副本? – MaxNoe

+0

@MaxNoe你是對的 - 這是不需要的:) – furas

+0

謝謝!但我怎麼才能訪問返回的字典?我如何參考它? – Eleftheria

0

對象通過引用的值進行傳遞,因此將新值賦給函數中的參數不會改變傳遞給它的對象引用的值。

我建議改爲複製副本。

def myfunction(list_a, list_b): 
    dict1 = dict(zip(list_a, list_b)) 
    return copy.deepcopy(dict1) 
2

如果你想使它成爲一個函數,你應該只是簡單地返回字典。沒有必要給一個解釋或作出deepcopy

def dict_from_lists(keys, vals): 
    return dict(zip(keys, vals)) 

my_dict = dict_from_lists(list_a, list_b) 

但對於一行代碼僅使用內建命令,我通常不會寫一個函數。

在我看來

my_dict = dict(zip(list_a, list_b)) 

是Python的,它不需要隱藏到底是怎麼回事用戶功能。

+0

我需要爲不同的列表製作很多次,所以我想嘗試做一個功能來爲我做所有需要的時間 – Eleftheria

+0

請看到我的更新 – MaxNoe

相關問題