python - 如何从函数中返回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'}
谢谢!
解决方案
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))
推荐阅读
- google-apps-script - 如何查找 Google 脚本库的所有用途?
- matlab - 如何在 MATLAB 中创建一个非符号函数的不连续函数?
- postgresql - 用于选择组中最佳/第一个元素的 Postgres 聚合函数
- php - Magento 2.3 升级不再读取我的 catalog_product_view.xml
- c++ - 是否可以使用指向未实例化对象的指针作为 C++ 中的变量?
- java - 试图获得给定的大整数的总和( 1 <= value <= 10 ^100 )
- bazel - 如何为所有 bazel 规则完全禁用远程缓存?
- android - 如何部署应用程序的新版本以与现有版本并行运行?
- python - 当我在代码块中创建文件时,为什么会出现“没有此类文件或目录错误”?
- r - 来自控制台的错误通知摘要