Python匹配接口名合并IP、MAC列表提示function object not iterable错误如何解决
问题原因
- 命名冲突:你定义的函数名
combinedlist和函数内部存储合并结果的列表变量名完全一致,Python会将内部变量覆盖函数本身,如果后续代码尝试迭代函数名(比如误写为for item in combinedlist:而不是先调用函数获取返回值),就会触发"function object not iterable"错误。 - 函数无返回值:当前合并函数仅在内部打印结果,未通过return返回合并后的列表,外部无法获取处理后的数据。
- 初始化逻辑错误:合并列表初始化时你添加了一个空字符串
['']作为首元素,后续使用时会多出无用的第一条数据。 - 匹配效率低:双重循环匹配接口名的时间复杂度为O(n*m),接口数量较多时性能较差。
修复后的代码
def combinedlist(IPList, MAClist): # 将MAC列表转换为以接口名为key的字典,匹配效率提升为O(1) mac_mapping = {item['Interface Name']: item['Physical Address'] for item in MAClist} # 初始化空列表存储合并结果 merge_result = [] for ip_entry in IPList: if_name = ip_entry['Interface Name'] # 匹配对应MAC地址,无匹配时默认返回None,可根据需求调整默认值 mac_addr = mac_mapping.get(if_name) merge_result.append({ 'name': if_name, 'ip': ip_entry['Ip Address'], 'MAC Address': mac_addr }) print(merge_result) return merge_result
使用方式
调用函数时需先执行函数获取返回值再进行遍历等操作,示例如下:
# 先调用函数拿到合并后的列表 final_list = combinedlist(IPList, MAClist) # 遍历处理结果 for entry in final_list: print(entry)
如果需要保留MAC列表存在但IP列表不存在的接口,可调整逻辑遍历两个列表的接口名并集后再合并数据。
内容的提问来源于stack exchange,提问作者Double_D
相关产品推荐
相关产品推荐

