110
votes

My code

1st file:

data = {'school':'DAV', 'standard': '7', 'name': 'abc', 'city': 'delhi'}
my_function(*data)

2nd file:

my_function(*data):
    schoolname  = school
    cityname = city
    standard = standard
    studentname = name

in the above code, only keys of "data" dictionary were get passed to my_function(), but i want key-value pairs to pass. How to correct this ?

I want the my_function() to get modified like this

my_function(school='DAV', standard='7', name='abc', city='delhi')

and this is my requirement, give answers according to this

EDIT: dictionary key class is changed to standard

3
Don't use variable names that are default objects in Python, such as the word class. - Torxed
...and this is my requirement, give answers according to this -- Ugh, a bit harsh. But a good question, nonetheless. - pfabri
@pfabri, it's quite clear from reading the question that English is not user's native language, so it's very possible that the harshness was unintended and that's just how they translated it to English. - stason

3 Answers

195
votes

If you want to use them like that, define the function with the variable names as normal:

def my_function(school, standard, city, name):
    schoolName  = school
    cityName = city
    standardName = standard
    studentName = name

Now you can use ** when you call the function:

data = {'school':'DAV', 'standard': '7', 'name': 'abc', 'city': 'delhi'}

my_function(**data)

and it will work as you want.

P.S. Don't use reserved words such as class.(e.g., use klass instead)

58
votes

*data interprets arguments as tuples, instead you have to pass **data which interprets the arguments as dictionary.

data = {'school':'DAV', 'class': '7', 'name': 'abc', 'city': 'pune'}


def my_function(**data):
    schoolname  = data['school']
    cityname = data['city']
    standard = data['class']
    studentname = data['name']

You can call the function like this:

my_function(**data)
15
votes

You can just pass it

def my_function(my_data):
    my_data["schoolname"] = "something"
    print my_data

or if you really want to

def my_function(**kwargs):
    kwargs["schoolname"] = "something"
    print kwargs