将字典传递给python中的函数作为关键字参数

问题描述:

我想在Python中使用字典调用函数。将字典传递给python中的函数作为关键字参数

下面是一些代码:

d = dict(param='test') 

def f(param): 
    print param 

f(d) 

这将打印{'param': 'test'}但我想它只是打印test

我想它更多的参数同样的工作:

d = dict(p1=1, p2=2) 
def f2(p1,p2): 
    print p1, p2 
f2(d) 

这可能吗?

想通了为自己到底。这很简单,我只是缺少**操作解压字典

所以我的例子就变成:

d = dict(p1=1, p2=2) 
def f2(p1,p2): 
    print p1, p2 
f2(**d) 
+29

如果你想要这个帮助别人,你应该重新说明你的问题:问题不是传递字典,你想要的是将字典转换为关键字参数 – Javier 2008-12-02 17:28:17

这里亚去 - 工作只是任何其他迭代:

d = {'param' : 'test'} 

def f(dictionary): 
    for key in dictionary: 
     print key 

f(d) 
+0

似乎人们在回答原来的问题,而不是回答的问题时,正在对此进行压制。我建议现在删除这个帖子。 – dotancohen 2013-12-10 08:00:03

+0

@dotancohen不,它从来都不是正确的,它没有通过问题的第二块代码。它从字面上看,印刷是一个例子。 – 2014-02-26 21:28:08

+0

它确实回答了这个问题,但它不是通过字典解包来完成的。根据发布的问题,他的方法完全有效。 – Natecat 2016-11-30 01:19:20

在Python中,这就是所谓的“解包”,你可以找到一些关于它在tutorial。它的文档很烂,我同意,特别是因为它有多么幻想有用。

一些额外的细节,可能有助于了解(问题我看完这个去和测试):

  1. 函数可以有包含在字典中的参数
  2. 您可以而不是覆盖已存在于字典中的参数
  3. 字典可以而不是具有不在该函数中的参数。每个

实例:

In[3]: def test(a=4, b=2): 
    ...:  print a, b 
    ...:  

数1:该函数可以具有未包含在字典中的参数

In[6]: mydict = {'a': 100} 
In[7]: test(**mydict) 
100 2 

数量2:不能覆盖已存在于字典中的参数

In[8]: mydict = {'a': 100, 'b': 200} 
In[9]: test(a=3, **mydict) 

TypeError: test() got multiple values for keyword argument 'a' 

编号3:字典中不能包含不在函数中的参数。

In[10]: mydict = {'a': 100, 'b': 200, 'c': 300} 
In[11]: test(**mydict) 

TypeError: test() got an unexpected keyword argument 'c'