Python如何拆分对象列表 提取x/y/z值生成三个独立列表
Python 拆分字典(字符串)列表为独立的x/y/z值列表
首先注意:你给出的原始列表中每个元素是字典格式的字符串,不是原生Python字典对象,直接按键取值会触发类型错误,需要先做格式转换再提取值。
实现步骤
- 安全转换字符串为字典:使用标准库
ast.literal_eval做格式转换,相比eval()不会执行字符串内的恶意代码,是处理字面量字符串的最优方案。 - 遍历转换后的字典列表,按key分别提取值存入对应列表。
完整可运行代码
import ast # 替换为你实际的244个元素的原始列表 raw_data = [ "{'x':-9.717017,'y':-14.0228567,'z':145.401215}", # ... 其余242个元素 "{'x':-6.44751644,'y':-65.20397,'z':-67.7079239}" ] # 批量将字符串转为字典对象 dict_data = [ast.literal_eval(item) for item in raw_data] # 分别提取三个维度的数值 x_values = [item['x'] for item in dict_data] y_values = [item['y'] for item in dict_data] z_values = [item['z'] for item in dict_data]
执行后你会得到三个独立列表,长度和原始列表一致,均为244,可以用以下代码验证:
print(len(x_values), len(y_values), len(z_values)) # 预期输出: 244 244 244
特殊场景简化写法
- 如果你的原始列表元素本身就是原生字典(不是带引号的字符串),可以跳过转换步骤,直接提取值:
# 仅适用于元素为dict类型的列表 x_values = [d['x'] for d in raw_data] y_values = [d['y'] for d in raw_data] z_values = [d['z'] for d in raw_data]
- 如果想要更简洁的拆包写法,可以用
zip实现一行赋值:
x_values, y_values, z_values = (list(seq) for seq in zip(*[(d['x'], d['y'], d['z']) for d in dict_data]))
内容的提问来源于stack exchange,提问作者Lucas Monnier
相关产品推荐
相关产品推荐

