Passing a dictionary to a function in python as ke

2019-01-02 17:02发布

I'd like to call a function in python using a dictionary.

Here is some code:

d = dict(param='test')

def f(param):
    print param

f(d)

This prints {'param': 'test'} but I'd like it to just print test.

I'd like it to work similarly for more parameters:

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

Is this possible?

4条回答
步步皆殇っ
2楼-- · 2019-01-02 17:16

Here ya go - works just any other iterable:

d = {'param' : 'test'}

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

f(d)
查看更多
情到深处是孤独
3楼-- · 2019-01-02 17:21

Figured it out for myself in the end. It is simple, I was just missing the ** operator to unpack the dictionary

So my example becomes:

d = dict(p1=1, p2=2)
def f2(p1,p2):
    print p1, p2
f2(**d)
查看更多
柔情千种
4楼-- · 2019-01-02 17:28

A few extra details that might be helpful to know (questions I had after reading this and went and tested):

  1. The function can have parameters that are not included in the dictionary
  2. You can not override a parameter that is already in the dictionary
  3. The dictionary can not have parameters that aren't in the function.

Examples of each:

def mytest(a=4, b=2):
    print a, b

Number 1: The function can have parameters that are not included in the dictionary

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

Number 2: You can not override a parameter that is already in the dictionary

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

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

Number 3: The dictionary can not have parameters that aren't in the function.

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

TypeError: mytest() got an unexpected keyword argument 'c'
查看更多
高级女魔头
5楼-- · 2019-01-02 17:29

In python, this is called "unpacking", and you can find a bit about it in the tutorial. The documentation of it sucks, I agree, especially because of how fantasically useful it is.

查看更多
登录 后发表回答