Вызов функции для каждого словаря в списке словарей - PullRequest
0 голосов
/ 08 октября 2018

В качестве входных данных у меня есть список словарей, как в примере ниже

list = [
         {"name": "John", "age": 36, "gender": "Male"},
         {"name": "Lisa", "age": 40, "gender": "Female"},
         {"name": "Mary", "age": 26, "gender": "Female"},
          ...
       ]

Я хочу запустить функцию, где я использую значения в словаре в качестве аргументов и для каждого словаря в списке

def value(person_name, person_age, person_gender):
    "returns a value based on arguments"

В качестве вывода мне нужно вернуть список значений, рассчитанных функцией для каждого словаря.Например:

[def value(John, 36, Male), def value(Lisa, 40, Female), def value(Mary, 26, Female), ...]

Спасибо за любую помощь:)

Ответы [ 5 ]

0 голосов
/ 08 декабря 2018

Простой случай map:

data = [
     {"name": "John", "age": 36, "gender": "Male"},
     {"name": "Lisa", "age": 40, "gender": "Female"},
     {"name": "Mary", "age": 26, "gender": "Female"},
      ...
   ]

def value(**kwargs):
    ...

result = list(map(data, value))
0 голосов
/ 09 октября 2018

Вы можете отправить весь словарь и распаковать его в функции

def value(x):
    name = x['name']
    age = x['age']
    gender = x['gender']
    # do something
    # return something 

for i in lista:            # full loop
    value(i)

[value(i) for i in lista]  # list comprehension
0 голосов
/ 08 октября 2018

kwargs здесь могут быть полезны, однако обратите внимание, что имена параметров функции должны точно соответствовать ключам словарей, чтобы использовать это

list = [
         {"name": "John", "age": 36, "gender": "Male"},
         {"name": "Lisa", "age": 40, "gender": "Female"},
         {"name": "Mary", "age": 26, "gender": "Female"},
       ]

def func1(name, age, gender):
    print("1: ", name)

def func2(name, age, gender):
    print("2: ", name)

def func3(name, age, gender):
    print("3: ", name)

for d in list:
    func1(**d)
    func2(**d)
    func3(**d)
0 голосов
/ 08 октября 2018

Если вы называете параметры вашей функции такими же, как клавиши dict, вы можете просто распаковать их с помощью **, как показано в примере ниже:

data = [
         {"name": "John", "age": 36, "gender": "Male"},
         {"name": "Lisa", "age": 40, "gender": "Female"},
         {"name": "Mary", "age": 26, "gender": "Female"}
       ]

def value(name, age, gender):
    return 'Name: {},  Age: {}, Gender: {}.'.format(name, age, gender)

[value(**i) for i in data]
#['Name: John,  Age: 36, Gender: Male.',
# 'Name: Lisa,  Age: 40, Gender: Female.',
# 'Name: Mary,  Age: 26, Gender: Female.']
0 голосов
/ 08 октября 2018

Вы можете использовать понимание списка.

result = [values(p['name'], p['age'], p['gender']) for p in list] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...