Python语法基础-数据类型、对应方法及与JSON的映射关系

前言

在 Python 中,数据类型用于定义变量或常量可以存储什么类型的数据。

Python 是一种动态类型语言,变量的类型是在运行时自动推断的,但了解常见的数据类型仍然非常重要。

Python 支持多种数据类型,适合处理不同类型的数据。

以下是常见数据类型的总结:

类型类别 数据类型 描述
数值类型 int, float, complex 整数、浮点数、复数
字符串类型 str 文本数据
布尔类型 bool TrueFalse
序列类型 list, tuple, range 列表、元组、范围
集合类型 set, frozenset 集合、冻结集合
映射类型 dict 字典
其他类型 bytes, bytearray, NoneType 二进制数据、空值等

以下是 Python 中常见的数据类型分类和详细说明。

基本数据类型

数值类型(Numeric Types)

数值类型用于存储数值数据。Python 支持三种数值类型:

  • 整数(int)

    • 示例:123, -456, 0
    • 描述:表示整数值,可以是正数、负数或零,没有大小限制。
    • 示例代码:
      1
      2
      a = 10
      print(type(a)) # 输出: <class 'int'>
  • 浮点数(float)

    • 示例:3.14, -0.007, 1.0e3(科学计数法)
    • 描述:表示带小数点的数值,支持科学计数法。
    • 示例代码:
      1
      2
      b = 3.14
      print(type(b)) # 输出: <class 'float'>
  • 复数(complex)

    • 示例:2 + 3j, -4j
    • 描述:表示实部和虚部的组合,虚部用 j 表示。
    • 示例代码:
      1
      2
      c = 2 + 3j
      print(type(c)) # 输出: <class 'complex'>

字符串(String Type)

字符串是用于存储文本数据的类型。

  • 示例"Hello, World!", 'Python', """多行字符串""", '''多行字符串'''
  • 描述
    • 使用单引号 '、双引号 " 或三引号 '''""" 定义字符串。
    • 三引号用于多行字符串或保留格式。
  • 示例代码
    1
    2
    s = "Hello, Python"
    print(type(s)) # 输出: <class 'str'>

布尔类型(Boolean Type)

布尔类型用于表示逻辑值 TrueFalse

  • 示例True, False
  • 描述
    • TrueFalse 是 Python 的关键字。
    • 布尔类型常用于条件判断。
  • 示例代码
    1
    2
    flag = True
    print(type(flag)) # 输出: <class 'bool'>

序列类型

序列类型用于存储一组有序的元素。

Python 支持多种序列类型,最常见的是列表、元组和范围。

列表(List)

列表是一个可变的、有序的元素集合。

  • 示例[1, 2, 3], ["apple", "banana", "cherry"], [1, "text", 3.14]
  • 描述
    • 列表中的元素可以是不同类型。
    • 列表是可变的,支持添加、删除和修改元素。
  • 示例代码
    1
    2
    my_list = [1, 2, 3]
    print(type(my_list)) # 输出: <class 'list'>

元组(Tuple)

元组是一个不可变的、有序的元素集合。

  • 示例(1, 2, 3), ("apple", "banana"), (1, "text", 3.14)
  • 描述
    • 元组中的元素可以是不同类型。
    • 元组是不可变的,创建后不能修改。
  • 示例代码
    1
    2
    my_tuple = (1, 2, 3)
    print(type(my_tuple)) # 输出: <class 'tuple'>

范围(Range)

范围是表示一个连续整数序列的不可变类型。

  • 示例range(10), range(2, 10, 2)
  • 描述
    • range(start, stop, step) 表示从 startstop(不包括 stop)的整数序列,步长为 step
  • 示例代码
    1
    2
    my_range = range(5)
    print(type(my_range)) # 输出: <class 'range'>

集合类型

集合类型用于存储一组无序且唯一的元素。

集合(Set)

集合是一个无序的、不重复的元素集合。

  • 示例{1, 2, 3}, {"apple", "banana", "cherry"}
  • 描述
    • 集合中的元素是唯一的,不能重复。
    • 集合是可变的,支持添加和删除元素。
  • 示例代码
    1
    2
    my_set = {1, 2, 3}
    print(type(my_set)) # 输出: <class 'set'>

冻结集合(Frozenset)

冻结集合是一个不可变的集合类型。

  • 示例frozenset({1, 2, 3})
  • 描述
    • 冻结集合中的元素是唯一的,不能重复。
    • 冻结集合是不可变的,创建后不能修改。
  • 示例代码
    1
    2
    my_frozenset = frozenset({1, 2, 3})
    print(type(my_frozenset)) # 输出: <class 'frozenset'>

映射类型

映射类型用于存储键值对。Python 中最常见的映射类型是字典。

字典(Dictionary)

字典是一个可变的、无序的键值对集合。

  • 示例{"name": "Alice", "age": 25}, {1: "one", 2: "two"}
  • 描述

    • 字典的键必须是不可变的类型(如字符串、数字或元组)。
    • 字典的值可以是任何类型。
  • 示例代码
    1
    2
    my_dict = {"name": "Alice", "age": 25}
    print(type(my_dict)) # 输出: <class 'dict'>

其他数据类型

字节(Bytes)

字节类型用于表示二进制数据。

  • 示例b'hello', b'\x41\x42\x43'
  • 描述
    • 字节类型是不可变的。
  • 示例代码
    1
    2
    my_bytes = b'hello'
    print(type(my_bytes)) # 输出: <class 'bytes'>

字节数组(Bytearray)

字节数组类型是字节类型的可变版本。

  • 示例bytearray(b'hello')
  • 描述
    • 字节数组是可变的。
  • 示例代码
    1
    2
    my_bytearray = bytearray(b'hello')
    print(type(my_bytearray)) # 输出: <class 'bytearray'>

空类型(NoneType)

None 表示没有值或空值。

  • 示例None
  • 描述
    • None 是 Python 中的一个特殊类型,用于表示空值。
  • 示例代码
    1
    2
    null_value = None
    print(type(null_value)) # 输出: <class 'NoneType'>

类型转换

Python 支持多种类型的转换,如:

  • int(): 将其他类型转换为整数。
  • float(): 将其他类型转换为浮点数。
  • str(): 将其他类型转换为字符串。
  • list(): 将其他类型转换为列表。
  • tuple(): 将其他类型转换为元组。
  • set(): 将其他类型转换为集合。
  • dict(): 将其他类型转换为字典。

示例

1
2
3
num = 5
float_num = float(num) # 转换为浮点数
str_num = str(num) # 转换为字符串

相关的方法

字典方法

方法 描述
clear() 删除字典中的所有元素
copy() 返回字典的副本
fromkeys() 返回拥有指定键和值的字典
get() 返回指定键的值
items() 返回包含每个键值对的元组的列表
keys() 返回包含字典键的列表
pop() 删除拥有指定键的元素
popitem() 删除最后插入的键值对
setdefault() 返回指定键的值。如果该键不存在,则插入具有指定值的键。
update() 使用指定的键值对字典进行更新
values() 返回字典中所有值的列表

在 Python 中,字典是一种非常灵活的数据结构,可以存储键值对。

要获取字典中的值或操作字典的属性,你可以使用几种不同的方法。

以下是一些常用的方法来获取字典中的属性和操作字典的内容:

获取字典中的值

使用键访问值

你可以使用字典的键来直接访问对应的值:

1
2
3
4
5
my_dict = {"name": "Alice", "age": 30, "city": "New York"}

# 通过键获取值
name = my_dict["name"]
print(name) # 输出: Alice

使用 get() 方法

get() 方法用于安全地获取字典中的值,如果键不存在,可以返回一个默认值(默认为 None):

1
2
3
4
5
6
age = my_dict.get("age")
print(age) # 输出: 30

# 指定默认值
country = my_dict.get("country", "Unknown")
print(country) # 输出: Unknown

检查键是否存在

使用 in 关键字可以检查一个键是否在字典中:

1
2
3
4
if "name" in my_dict:
print("键 'name' 存在")
else:
print("键 'name' 不存在")

获取所有键、值或键值对

获取所有键:使用 keys() 方法

1
2
keys = my_dict.keys()
print(keys) # 输出: dict_keys(['name', 'age', 'city'])

获取所有值:使用 values() 方法

1
2
values = my_dict.values()
print(values) # 输出: dict_values(['Alice', 30, 'New York'])

获取所有键值对:使用 items() 方法

1
2
items = my_dict.items()
print(items) # 输出: dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])

遍历字典

你可以遍历字典的键、值或键值对:

遍历键和值

1
2
for key in my_dict:
print(f"键: {key}, 值: {my_dict[key]}")

遍历键值对

1
2
for key, value in my_dict.items():
print(f"键: {key}, 值: {value}")

数组

Python中集合类型是没有数组的。

Python 内置的 array 模块提供了一种更高效的数组实现,可以指定元素类型。

但是,它的长度也是动态的,和 list 类似。

1
2
3
4
import array

# 创建一个整型数组
arr = array.array('i', [0] * 10) # 初始化一个长度为 10 的整型数组

列表

方法 描述
append() 在列表的末尾添加一个元素
clear() 删除列表中的所有元素
copy() 返回列表的副本
count() 返回具有指定值的元素数量。
extend() 将列表元素(或任何可迭代的元素)添加到当前列表的末尾
index() 返回具有指定值的第一个元素的索引
insert() 在指定位置添加元素
pop() 删除指定位置的元素
remove() 删除具有指定值的项目
reverse() 颠倒列表的顺序
sort() 对列表进行排序

列表排序

1
sort_list = sorted(lineList, key=lambda x: x[0])

列表中的高频字符串

你可以使用 Python 中的 collections.Counter 来获取字符串列表中出现最多的字符串及其比例。

以下是一个示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from collections import Counter

def get_most_common_string_and_ratio(string_array):
if not string_array:
return None, 0 # 如果数组为空,返回 None 和 0

# 统计每个字符串的出现次数
counter = Counter(string_array)

# 获取出现次数最多的字符串及其次数
most_common_string, most_common_count = counter.most_common(1)[0]

# 计算总字符串数量
total_count = len(string_array)

# 计算比例
ratio = most_common_count / total_count

return most_common_string, ratio

# 示例
strings = ["apple", "banana", "apple", "orange", "banana", "apple"]
most_common_string, ratio = get_most_common_string_and_ratio(strings)

print(f"出现最多的字符串: {most_common_string}, 比例: {ratio:.2f}")

说明

  1. CounterCounter 类会生成一个字典,键为字符串,值为对应的出现次数。
  2. most_commonmost_common(1) 返回出现次数最多的字符串及其次数。
  3. 比例计算:通过将出现次数除以总字符串数来计算比例。

集合Set

方法 描述
add() 向集合添加元素。
clear() 删除集合中的所有元素。
copy() 返回集合的副本。
difference() 返回包含两个或更多集合之间差异的集合。
difference_update() 删除此集合中也包含在另一个指定集合中的项目。
discard() 删除指定项目。
intersection() 返回为两个其他集合的交集的集合。
intersection_update() 删除此集合中不存在于其他指定集合中的项目。
isdisjoint() 返回两个集合是否有交集。
issubset() 返回另一个集合是否包含此集合。
issuperset() 返回此集合是否包含另一个集合。
pop() 从集合中删除一个元素。
remove() 删除指定元素。
symmetric_difference() 返回具有两组集合的对称差集的集合。
symmetric_difference_update() 插入此集合和另一个集合的对称差集。
union() 返回包含集合并集的集合。
update() 用此集合和其他集合的并集来更新集合。

元组

方法 描述
count() 返回元组中指定值出现的次数。
index() 在元组中搜索指定的值并返回它被找到的位置。

Python和JSON类型映射

支持类型的映射

Python 类型 JSON 类型 描述
dict object Python 的字典类型对应 JSON 的对象格式。
list, tuple array Python 的列表或元组对应 JSON 的数组格式。
str string Python 的字符串对应 JSON 的字符串类型。
int, float number Python 的整数或浮点数对应 JSON 的数值类型。
True true Python 的布尔值 True 对应 JSON 的 true
False false Python 的布尔值 False 对应 JSON 的 false
None null Python 的 None 对应 JSON 的 null 值。

不支持类型转换

set/range

在 Python 中,setrange 类型虽然在 Python 内部非常有用,但它们并不是直接支持 JSON 序列化的默认类型。

因此,在将 setrange 转换为 JSON 时,需要先将它们转换为 JSON 支持的类型(如 list)。

set

1
2
3
4
import json
python_set = {1, 2, 3, 4}
python_list = list(python_set)
print(json.dumps(python_list))

range

1
2
3
4
import json
python_range = range(1, 6) # 生成 1, 2, 3, 4, 5
python_list = list(python_range)
print(json.dumps(python_list))

bytes

在 Python 中,bytes 类型表示一组不可变的字节序列。由于 JSON 是一种文本格式,它本身不直接支持二进制数据。因此,要将 bytes 类型的数据序列化为 JSON,需要先将其转换为 JSON 支持的文本格式,如 strbase64 编码的字符串。

以下是几种常见的处理方法:

1. 使用 base64 编码

base64 编码是一种将二进制数据编码为文本字符串的方法,适合用于 JSON 序列化。

示例

1
2
3
4
5
6
7
8
9
10
11
12
import json
import base64

# 原始 bytes 数据
python_bytes = b'Hello, World!'

# 使用 base64 编码
encoded_bytes = base64.b64encode(python_bytes).decode('utf-8')

# 序列化为 JSON
json_data = json.dumps(encoded_bytes)
print(json_data)

输出

1
"SGVsbG8sIFdvcmxkIQ=="

2. 转换为十六进制字符串

另一种方法是将 bytes 转换为十六进制字符串。

示例

1
2
3
4
5
6
7
8
9
10
11
import json

# 原始 bytes 数据
python_bytes = b'Hello, World!'

# 转换为十六进制字符串
hex_string = python_bytes.hex()

# 序列化为 JSON
json_data = json.dumps(hex_string)
print(json_data)

输出

1
"48656c6c6f2c20576f726c6421"

3. 转换为 UTF-8 字符串

如果 bytes 数据是 UTF-8 编码的文本,可以直接解码为字符串。

示例

1
2
3
4
5
6
7
8
9
10
11
import json

# 原始 bytes 数据
python_bytes = b'Hello, World!'

# 解码为 UTF-8 字符串
utf8_string = python_bytes.decode('utf-8')

# 序列化为 JSON
json_data = json.dumps(utf8_string)
print(json_data)

输出

1
"Hello, World!"

总结

方法 适用场景 示例输出
base64 编码 通用,适用于任何二进制数据 "SGVsbG8sIFdvcmxkIQ=="
十六进制字符串 需要处理二进制数据的特定应用 "48656c6c6f2c20576f726c6421"
UTF-8 字符串解码 数据为 UTF-8 编码的文本 "Hello, World!"

选择哪种方法取决于具体的应用需求和数据特性。

对于通用的二进制数据,推荐使用 base64 编码,因为它广泛支持且效率高。