返回f字符串的For循环函数

时间:2019-02-17 15:18:00

标签: python for-loop f-string

我是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 :(得分:0)

如果要获取所有名称:

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)

答案 1 :(得分:0)

虽然有一个循环,但在循环中也有一个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']