如何在Python中为列表添加与另一列表匹配值的列?
解决方案
针对你从Excel转Python的需求,这里提供两种实现方法,从易理解到高效优化:
方法1:嵌套循环(新手友好,逻辑直观)
这种方法完全贴合手动匹配的思路,遍历两个列表找对应项:
mydata = [['e', 'cat'], ['a', 'dog'], ['i', 'bird'], ['o', 'frog']] lst = [['a', '1'], ['e', '2'], ['i', '3'], ['o', '4'], ['u', '5']] mydata_1 = [] for item in mydata: # 提取当前子列表的匹配关键字 match_key = item[0] # 遍历lst找对应匹配项 for pair in lst: if pair[0] == match_key: # 复制原列表避免修改原始数据,追加匹配值后加入结果 new_item = item.copy() new_item.append(pair[1]) mydata_1.append(new_item) break # 找到匹配就停止遍历,提升效率 print(mydata_1)
注:用item.copy()是为了防止修改原始的mydata列表,如果你不需要保留原数据,也可以直接item.append(pair[1])后加入结果。
方法2:字典映射(高效推荐,适合大数据量)
因为lst里的首元素都是唯一的,我们可以先把它转换成字典,把匹配关键字作为键,对应值作为值,这样查找速度会大幅提升(从逐个遍历的O(n*m)变成O(1)的直接查找):
mydata = [['e', 'cat'], ['a', 'dog'], ['i', 'bird'], ['o', 'frog']] lst = [['a', '1'], ['e', '2'], ['i', '3'], ['o', '4'], ['u', '5']] # 把lst转换成字典,方便快速查找 lookup_dict = {pair[0]: pair[1] for pair in lst} # 用列表推导式一行生成结果 mydata_1 = [item.copy() + [lookup_dict[item[0]]] for item in mydata] print(mydata_1)
容错优化(可选)
如果mydata里可能存在lst中没有的关键字,可以用get方法避免报错,找不到时返回默认值(比如空字符串):
mydata_1 = [item.copy() + [lookup_dict.get(item[0], '')] for item in mydata]
内容的提问来源于stack exchange,提问作者Crazy Apple
相关产品推荐
相关产品推荐

