如何从函数中返回dict?

2024-04-27 16:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图制作一个应该有多个键和值的dict,但是当在函数中执行它时,它只返回第一个键,值

我认为这是因为我在错误的地方使用了return,但我不确定如何使它正确工作

我有一个列表,我正试图将其转换为函数中的dict

In [876]: cable_map
Out[876]: ['SYD_A_1234 <> Outlet1', 'SYD_B_4567 <> Outlet2', 'MELB_A_1111 <> Outlet1']

下面是函数

In [880]: def make_map():
     ...:     mymap = {}
     ...:     for line in cable_map:
     ...:         if re.search("SYD", line.split(' <> ',1)[0]):
     ...:             mymap.update({line.split(' <> ',1)[0]:line.split(' <> ',1)[1]})
     ...:             return mymap
     ...:
     ...:     return {}
     ...:

In [882]: cable_map = make_map()

In [883]: cable_map
Out[883]: {'SYD_A_1234': 'Outlet1'}

正如您所看到的,它只是将第一个键value放入dict中。如果我在函数外部运行相同的代码,它将按预期工作:

In [891]: mymap = {}
     ...: for line in cable_map:
     ...:     if re.search("SYD", line.split(' <> ',1)[0]):
     ...:         mymap.update({line.split(' <> ',1)[0]:line.split(' <> ',1)[1]})
     ...:
     ...:

In [892]: mymap
Out[892]: {'SYD_A_1234': 'Outlet1', 'SYD_B_4567': 'Outlet2'}

谢谢


Tags: 函数inmapformakereturnlineout
3条回答
my_cable_map = ['SYD_A_1234 <> Outlet1', 'SYD_B_4567 <> Outlet2', 'MELB_A_1111 <> Outlet1']    
def make_map(cable_map):
    mymap = {}
    for line in cable_map:
        if re.search("SYD", line.split(' <> ', 1)[0]):
            mymap.update({line.split(' <> ', 1)[0]: line.split(' <> ', 1)[1]})
    return mymap

print(make_map(my_cable_map))

这是因为return语句导致函数在循环的第一次迭代时退出,而在函数外部,循环运行在cable_map中的所有line

现在的工作代码:

In [919]: def make_map():
     ...:     mymap = {}
     ...:     for line in cable_map:
     ...:         if re.search("SYD", line.split(' <> ',1)[0]):
     ...:             mymap.update({line.split(' <> ',1)[0]:line.split(' <> ',1)[1]})
     ...:     return mymap
     ...:

In [920]: cable_map = make_map()

In [921]: cable_map
Out[921]: {'SYD_A_1234': 'Outlet1', 'SYD_B_4567': 'Outlet2'}

相关问题 更多 >