如何用普通列表和嵌套列表生成对应映射的Python字典
代码问题排查与解决
核心问题说明
你的代码存在两处问题导致输出异常:
- 语法缺陷:
List2的定义末尾缺少闭合的右中括号],如果运行时没有抛出语法错误,大概率是你粘贴代码时的遗漏。 - 逻辑错误:误用
zip()函数。List1[i]是字符串类型(例如"abcd"),zip()会将字符串拆分为单个字符的可迭代对象,和后面的element[1:]配对后,生成的字典键是单个字符a/b等,并非你需要的完整字符串作为键。
另外不建议使用dict作为变量名,会覆盖Python内置的dict类,后续调用字典相关内置方法时会出现异常。
修正代码
适配原逻辑的写法
保留你原本的索引校验逻辑,直接给字典赋值即可:
List1= [ "abcd", "efg", "hijk"] List2= [ ["abcd", "hello", "world"], ["efg", "My name's", "Tom"], ["hijk", "I", "Love you"]] res_dict = {} i = 0 for element in List2: if element[0] == List1[i]: res_dict[List1[i]] = element[1:] else: print("error") print(element[0], List1[i]) i += 1 print(res_dict)
更稳妥的通用写法
如果List1和List2的元素顺序不一定完全匹配,推荐先把List2转为中间字典,再匹配List1生成结果:
List1= [ "abcd", "efg", "hijk"] List2= [ ["abcd", "hello", "world"], ["efg", "My name's", "Tom"], ["hijk", "I", "Love you"]] # 先构造List2的索引字典 list2_map = {item[0]: item[1:] for item in List2} res_dict = {} for key in List1: if key in list2_map: res_dict[key] = list2_map[key] else: print(f"error: {key} 不存在于List2中") print(res_dict)
内容的提问来源于stack exchange,提问作者Salvatore Pennisi
相关产品推荐
相关产品推荐

