如何将嵌套元组列表中的值按键拆分到对应列表?
错误原因
你写的代码存在两个核心问题:
- 内层循环未加
break语句:找到匹配的A键后没有终止遍历,同时for循环的else分支只要内层循环正常执行结束(没有被break打断)就会触发,所以哪怕找到了A的对应值,最后也会额外追加一个NaN - 没有做「找到值就跳过补NaN」的逻辑,导致每个子列表遍历后都会同时追加匹配到的值和多余的
NaN,最终输出长度异常
修复方案
单个键提取修复版
如果只需要提取单个键(比如A)的取值列表,可以用如下代码:
a_lst = [] for tup_lst in tup_new_lst: # 先默认赋值为NaN current_val = 'NaN' for item in tup_lst: if item[0] == 'A': current_val = item[1] # 找到后直接终止内层循环,避免多余遍历 break a_lst.append(current_val) print(a_lst)
运行输出:
['10', 'NaN', '24K']
全键通用提取方案
如果需要一次性提取所有键的结果,可以用更通用的实现:
# 先获取所有唯一的键 all_keys = sorted({t[0] for sub_list in tup_new_lst for t in sub_list}) result = {} for key in all_keys: key_values = [] for sub_list in tup_new_lst: val = 'NaN' for k, v in sub_list: if k == key: val = v break key_values.append(val) result[key] = key_values # 格式化输出结果 for k, v in result.items(): print(f"{k}: {v}")
运行输出:
A: ['10', 'NaN', '24K'] B: ['28D', '49C', 'NaN'] C: ['14', 'T26', 'B28'] D: ['NaN', 'NaN', '54C']
内容的提问来源于stack exchange,提问作者waji
相关产品推荐
相关产品推荐

