首页 > 解决方案 > 如何从函数中返回dict?

问题描述

我正在尝试制作一个应该有多个键和值的字典,但是在函数内部执行它时,它只返回第一个键值。

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

我有这个列表,我正在尝试将其转换为函数中的字典

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

如您所见,它只是将第一个键值放入字典中。如果我在函数之外运行相同的代码,它会按预期工作:

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

谢谢!

标签: python

解决方案


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))

推荐阅读