You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python zip处理数据类实例而非元组?

实现数据类实例列表的"zip逆运算"(生成字段字典)

要实现不用显式列表推导式,把数据类实例列表转换成以字段名为键、对应字段值集合为值的字典,可以利用数据类自带工具函数和Python内置函数组合完成:

完整代码示例

from dataclasses import dataclass, astuple

@dataclass
class XY:
    "2d point"
    x: float | int
    y: float | int

points = [XY(1,2), XY(3,4), XY(5,6), XY(7,8)]

# 核心实现
field_values = dict(zip(XY.__dataclass_fields__.keys(), zip(*map(astuple, points))))

print(field_values)
# 输出: {'x': (1, 3, 5, 7), 'y': (2, 4, 6, 8)}

代码解释

  • map(astuple, points):用astuple把每个XY实例转换成对应字段值的元组,替代了显式的列表推导式,且无需硬编码字段名
  • zip(*map(...)):和元组列表的zip(*points)逻辑一致,把所有实例的第1个字段、第2个字段分别打包成元组
  • XY.__dataclass_fields__.keys():获取XY类定义的所有字段名,和打包后的字段值元组一一对应,最后用dict()构造出目标字典

这种方法适配性强——如果以后给XY类新增字段(比如加个z),代码不用做任何修改,自动会把新字段的集合也加入结果字典。

内容的提问来源于stack exchange,提问作者sds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:07:23