2015-11-18 38 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

相关问题