Python 如何从函数中返回dict?
我试图制作一个应该有多个键和值的dict,但是当在函数中执行它时,它只返回第一个键,值 我想这是因为我在错误的地方使用了Python 如何从函数中返回dict?,python,Python,我试图制作一个应该有多个键和值的dict,但是当在函数中执行它时,它只返回第一个键,值 我想这是因为我在错误的地方使用了return,但我不确定如何使它正常工作 我有一个列表,我正试图将其转换为函数中的dict In [876]: cable_map Out[876]: ['SYD_A_1234 <> Outlet1', 'SYD_B_4567 <> Outlet2', 'MELB_A_1111 <> Outlet1'] [876]中的:电缆地图 Out[8
return
,但我不确定如何使它正常工作
我有一个列表,我正试图将其转换为函数中的dict
In [876]: cable_map
Out[876]: ['SYD_A_1234 <> Outlet1', 'SYD_B_4567 <> Outlet2', 'MELB_A_1111 <> Outlet1']
[876]中的:电缆地图
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'}
[880]中的:def make_map():
…:mymap={}
…:对于电缆地图中的线路:
…:如果重新搜索(“SYD”,行拆分(“”,1)[0]):
…:mymap.update({line.split('',1)[0]:line.split('',1)[1]})
…:返回mymap
...:
…:返回{}
...:
在[882]中:cable\u map=make\u map()
在[883]中:电缆图
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'}
[891]中的:mymap={}
…:对于电缆地图中的线路:
…:如果重新搜索(“SYD”,行拆分(“”,1)[0]):
…:mymap.update({line.split('',1)[0]:line.split('',1)[1]})
...:
...:
在[892]中:mymap
Out[892]:{'SYD_A_1234':'Outlet1','SYD_B_4567':'Outlet2'}
谢谢 这是因为
return
语句会导致函数在循环的第一次迭代时退出,而在函数外部,循环会贯穿cable\u mapmy\u cable\u map=['SYD\u A\u 1234 Outlet1','SYD\u B\u 4567 Outlet2','MELB\u A\u 1111 Outlet1']
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))
def make_映射(电缆映射):
mymap={}
对于电缆布线图中的线路:
如果重新搜索(“SYD”,行分割(“”,1)[0]):
mymap.update({line.split('',1)[0]:line.split('',1)[1]})
返回我的地图
打印(制作地图(我的电缆地图))
现在工作的代码:
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'}
[919]中的:def make_map():
…:mymap={}
…:对于电缆地图中的线路:
…:如果重新搜索(“SYD”,行拆分(“”,1)[0]):
…:mymap.update({line.split('',1)[0]:line.split('',1)[1]})
…:返回mymap
...:
在[920]中:cable\u map=make\u map()
在[921]中:电缆图
Out[921]:{'SYD_A_1234':'Outlet1','SYD_B_4567':'Outlet2'}
在第一次迭代结束时,您很快就返回了mymap
。循环完成后返回。您可以从if返回mymap
。应该在外面啊哈。。。愚蠢的错误。谢谢。。。这就是我的结局。在这里放置cable\u map
的目的是什么def make\u map(cable\u map):
。我无法使它与该代码一起工作。cable_map是您的变量当您调用此函数时,您可以传递您的变量