📜  Python中的数据类 | Set 6(与其他数据类型的相互转换)(1)

📅  最后修改于: 2023-12-03 15:19:30.063000             🧑  作者: Mango

Python中的数据类 | Set 6(与其他数据类型的相互转换)

在Python中,数据类型之间的转换是非常常见的操作。本篇文章将为你介绍如何进行数据类与其他数据类型的相互转换。

1. 字符串(str) <-> 数据类

你可以使用json模块将数据类与字符串进行相互转换。

1.1 数据类 -> 字符串

下面是如何将数据类转换为字符串:

import json

@dataclass
class Point:
    x: float
    y: float

point = Point(1.0, 2.0)
str_repr = json.dumps(asdict(point))

使用dumps函数将数据类的字典表示转换为字符串。

1.2 字符串 -> 数据类

下面是如何将字符串转换为数据类:

import json

@dataclass
class Point:
    x: float
    y: float

str_repr = '{"x": 1.0, "y": 2.0}'
point = Point(**json.loads(str_repr))

使用loads函数将字符串转换为字典表示,然后将其传给数据类构造函数。

2. 字典(dict) <-> 数据类

你可以使用asdict函数将数据类与字典进行相互转换。

2.1 数据类 -> 字典

下面是如何将数据类转换为字典:

@dataclass
class Point:
    x: float
    y: float

point = Point(1.0, 2.0)
dict_repr = asdict(point)
2.2 字典 -> 数据类

下面是如何将字典转换为数据类:

@dataclass
class Point:
    x: float
    y: float

dict_repr = {"x": 1.0, "y": 2.0}
point = Point(**dict_repr)

将字典作为关键字参数传给数据类构造函数即可。

3. 元组(tuple) <-> 数据类

你可以使用astuple函数将数据类与元组进行相互转换。

3.1 数据类 -> 元组

下面是如何将数据类转换为元组:

@dataclass
class Point:
    x: float
    y: float

point = Point(1.0, 2.0)
tuple_repr = astuple(point)
3.2 元组 -> 数据类

下面是如何将元组转换为数据类:

@dataclass
class Point:
    x: float
    y: float

tuple_repr = (1.0, 2.0)
point = Point(*tuple_repr)

将元组拆包后作为位置参数传给数据类构造函数即可。

4. 可变序列(list, set) <-> 数据类

你可以使用from_dict函数将数据类与序列进行相互转换。

4.1 数据类 -> 列表

下面是如何将数据类转换为列表:

@dataclass
class Point:
    x: float
    y: float

point = Point(1.0, 2.0)
list_repr = list(asdict(point).values())

将数据类的字典表示取值后,放入列表中即可。

4.2 列表 -> 数据类

下面是如何将列表转换为数据类:

@dataclass
class Point:
    x: float
    y: float

list_repr = [1.0, 2.0]
point = Point(*list_repr)

将列表拆包后作为位置参数传给数据类构造函数即可。

4.3 数据类 -> 集合

下面是如何将数据类转换为集合:

@dataclass
class Point:
    x: float
    y: float

point1 = Point(1.0, 2.0)
point2 = Point(2.0, 3.0)
set_repr = {asdict(point1), asdict(point2)}

将数据类的字典表示作为集合元素。

4.4 集合 -> 数据类

下面是如何将集合转换为数据类:

@dataclass
class Point:
    x: float
    y: float

set_repr = [{"x": 1.0, "y": 2.0}, {"x": 2.0, "y": 3.0}]
points = [Point(**item) for item in set_repr]

使用集合中的字典元素实例化多个数据类即可。

至此,本篇文章介绍了如何进行数据类与其他数据类型的相互转换。代码中使用了json模块,需要注意安装。