Для функции цикла, которая возвращает f-строку - PullRequest
0 голосов
/ 17 февраля 2019

Я новичок в python и пытаюсь написать функцию, которая принимает список словарей и возвращает новый список строк с ключами имени и фамилии в каждом соединенном словаре.

names = [{'first': 'John', 'last': 'Smith'}, {'first': 'Jessie', 'last': 'Snow'}]


 def name_function(lst):     
     for name in lst:       
         return f"{name['first']} {name['last']}" 

 names_function(names)
 'John Smith'

Я написал цикл for, который выполняет итерацию по списку словарей и возвращает f-строку, которая объединяет ключи имени и фамилии в каждом словаре, однако цикл не может выполнить итерации после первого ключа иЯ надеюсь, что кто-то может указать мне на проблему.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Пока у вас есть цикл, у вас также есть return внутри цикла.На первой итерации списка будет выполнено нажатие return, и выполнение функции на этом остановится, и будет возвращено только значение в этой строке, которое является строкой, а не предназначенный список.

Вам либо нужнодобавить список к функции для использования в качестве аккумулятора перед возвратом -

def names_function(lst):  
    names = []      
    for name in lst:       
        names.append(f"{name['first']} {name['last']}")
    return names   

Или использовать понимание списка

def names_function(lst):  
    return [f"{name['first']} {name['last']}" for name in lst]

names_function(names)

Оба будут выводить

['John Smith', 'Jessie Snow']

Вы также можете заменить return на yield, чтобы превратить его в генератор.Чтобы получить все значения, вам нужно выполнить итерацию генератора (или вызвать list для него)

def names_function(lst):     
    for name in lst:       
        yield f"{name['first']} {name['last']}" 

list(names_function(names))

, что дает тот же результат

['John Smith', 'Jessie Snow']
0 голосов
/ 17 февраля 2019

, если вы хотите получить все имена:

def names_function(lst):
    ret=""
    for name in lst:
        ret += f"{name['first']} {name['last']}\n"
    return ret

или

def names_function(lst):
    return [f"{name['first']} {name['last']}" for name in lst]

, если вы хотите создать объект генератора:

def names_function(lst):
    return (f"{name['first']} {name['last']}" for name in lst)
...