首页 > Python 笔记 > python中映射类型包括

python中映射类型包括

更新:
定义映射类型

在Python中,映射类型是一种基于键值存储数据的数据结构,它通过键存储和搜索数据值。相应的英语术语是“mapping type”。一般来说,它是用来构建多个唯一键对应多个值的集合。

字典:Python的主要映射类型

字典,或者说dict,是Python内置的主要映射类型。该数据类型采用花括号{}或dict()构造器创建,具有极高的灵活性和效率,是实现快速数据搜索的有力工具。

# 创建一本空字典
empty_dict = {}
# 或者
empty_dict = dict()

# 创建一本包含正确键值的字典
info_dict = {
    'name': 'Alice',
    'age': 25,
    'gender': 'Female'
}

# 参观字典中的元素
print(info_dict['name'])  # 输出 Alice

# 添加一个新的键值对
info_dict['job'] = 'Engineer'

# 遍历字典元素
for key, value in info_dict.items():
    print(f'{key}: {value}')
怎样使用字典来处理数据?

字典通常用于表示实体的属性和存储数据记录,如数据库项目和配置选项,因为它们的键值是正确的。它还适用于计数、数据分组、对象属性存储和更多场景。

# 计数示例:统计字符出现频率
text = "hello world"
char_count = {}
for char in text:
    if char in char_count:
        char_count[char] += 1
    else:
        char_count[char] = 1
print(char_count)
其它映射类型的collections模块

Python的collections模块除了标准字典之外,还提供了OrderedDictions等一些变种的映射类型、defaultdict和Counter等,它们各有特色,满足不同场景的需要。

# OrderedDict示例:保持键的插入顺序
from collections import OrderedDict

ordered_dict = OrderedDict()
ordered_dict['banana'] = 3
ordered_dict['apple'] = 5
ordered_dict['pear'] = 2

for key, value in ordered_dict.items():
    print(f'{key}: {value}')

# defaultdict示例:在访问不存在的键时提供默认值
from collections import defaultdict

default_dict = defaultdict(int)  # int() 产生 0
default_dict['key1'] += 1
print(default_dict['key1']  # 输出 1
print(default_dict['key2']  # 输出 0,即默认值

# 快速计数,Counter示例:
from collections import Counter

word_counts = Counter("banana")
print(word_counts)  # 输出 Counter({'a': 3, 'b': 1, 'n': 2})
映射类型由用户定义

除内置映射类型和collections模块映射类型外,您还可以继承dict或实现collections。.abc.创建自定义映射类型的Mapping抽象基类。

from collections.abc import Mapping

class CustomMap(Mapping):
    def __init__(self, initial_data=None):
        self._storage = dict(initial_data or [])
    
    def __getitem__(self, key):
        return self._storage[key]
    
    def __iter__(self):
        return iter(self._storage)
    
    def __len__(self):
        return len(self._storage)

custom_map = CustomMap({'key1': 'value1', 'key2': 'value2'}
print(custom_map['key1']  # 输出 value1
线程安全的映射类型

在多线程环境中使用映射类型时,需要考虑线程安全性。虽然在一些操作中,普通的dict类型是线程安全的,但数据竞争可能会出现在并发环境中。解决方案是使用threading模块中的Lock类,或者使用concurrent。.futures模块。

from threading import Lock

class ThreadSafeDict(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._lock = Lock()

    def __setitem__(self, key, value):
        with self._lock:
            super().__setitem__(key, value)

thread_safe_dict = ThreadSafeDict()
# 使用该线程安全的字典

从简单的dict到强大的collections模块扩展,再到定制的线程安全映射,Python中的映射类型丰富多样,形成了一个功能全面、能胜任多种编程任务的系统。掌握并合理使用这些映射类型,将能大大提高编程效率和代码可靠性。

文章目录
顶部