首页 > 解决方案 > 返回 f 字符串的 for 循环函数

问题描述

我是 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 字符串,该字符串连接每个字典中的名字和姓氏键,但是,循环无法迭代到第一个键之外,我希望有人能指出我问题。

标签: pythonfor-loopf-string

解决方案


当你有一个循环时,你也有一个return内部循环。在列表的第一次迭代中,这return将被命中并且函数的执行将在那里停止,只返回该行上的值——这是一个字符串——而不是预期的列表。

您要么需要在函数中添加一个列表以用作累加器,然后再返回 -</p>

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

您也可以将其替换为returnayield以将其变成生成器。要获取您需要迭代生成器(或调用list它)的所有值

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

list(names_function(names))

这给出了相同的结果

['John Smith', 'Jessie Snow']

推荐阅读