¿Cómo pasar elementos de diccionario como argumentos de función en python? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Mi código

1er archivo:

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

2do archivo:

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

En el código anterior, solo las claves del diccionario "data" se pasan a my_function(), pero quiero que se pasen los pares clave-valor. Cómo corregir esto ?

Quiero que el my_function() se modifique así

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

Y este es mi requisito, dar respuestas de acuerdo a esto

EDITAR: dictionary key class se cambia a standard

Author: Gabriel, 2014-02-24

3 answers

Si quieres usarlos así, define la función con los nombres de las variables como normal (pero usa klass para class, no puedes usar palabras reservadas):

def my_function(school, city, klass, name):
    schoolname  = school
    cityname = city
    standard = klass
    studentname = name

Ahora (siempre y cuando cambie el nombre de class a klass en su diccionario) puede usar ** cuando llame a la función:

my_function(**data)

Y funcionará como quieras.

 77
Author: RemcoGerlich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 11:22:17

*data interpreta los argumentos como tuplas, en su lugar debe pasar **data que interpreta los argumentos como diccionario.

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']

Puedes llamar a la función así:

my_function(**data)
 30
Author: user3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 11:23:31

Puedes pasarlo

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

O si realmente quieres

def my_function(**kwargs):
    kwargs["schoolname"] = "something"
    print kwargs
 6
Author: Jakob Bowyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 11:18:43