首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每日一模块:collections

Python的collections模块提供了很多高级的数据结构,使得我们在处理数据时能够更加方便和高效。下面我们将详细讲解collections模块中各个类的功能,并给出相应的样例。

1. 导入模块

首先,我们需要导入collections模块:

import collections2. Counter

Counter是一个字典子类,用于计数可哈希对象。这里我们用它来统计各国出现的次数。

from collections import Counter

# 一个包含各国名称的列表

countries = ['China', 'USA', 'India', 'China', 'Brazil', 'USA', 'India', 'Russia', 'China']

# 使用Counter来统计每个国家出现的次数

country_counts = Counter(countries)

# 打印统计结果

print(country_counts)

# 输出可能是:Counter({'China': 3, 'USA': 2, 'India': 2, 'Brazil': 1, 'Russia': 1})

# 找出出现次数最多的国家

most_common_country = country_counts.most_common(1)

print(most_common_country)

# 输出可能是:[('China', 3)]

# 计算两个Counter的合并

other_countries = ['Japan', 'Germany', 'USA', 'China']

other_counts = Counter(other_countries)

combined_counts = country_counts + other_counts

print(combined_counts)

# 输出可能是:Counter({'China': 4, 'USA': 3, 'India': 2, 'Brazil': 1, 'Russia': 1, 'Japan': 1, 'Germany': 1})

# 从一个Counter中减去另一个Counter

country_counts -= Counter(['India', 'Brazil'])

print(country_counts)

# 输出可能是:Counter({'China': 3, 'USA': 2, 'Russia': 1})3. deque

deque是一个双端队列,支持从两端添加和删除元素。

from collections import deque

# 创建一个deque对象

d = deque()

d.append('China')

d.append('USA')

d.appendleft('India')

print(d)  # 输出:deque(['India', 'China', 'USA'])

# 从右端弹出元素

print(d.pop())  # 输出:'USA'

# 从左端弹出元素

print(d.popleft())  # 输出:'India'4. defaultdict

defaultdict是一个字典子类,提供了默认值。

from collections import defaultdict

# 创建一个使用list作为默认值的defaultdict

dd = defaultdict(list)

dd['Asia'].append('China')

dd['Asia'].append('India')

dd['America'].append('USA')

print(dd)  # 输出:defaultdict(<class 'list'>, {'Asia': ['China', 'India'], 'America': ['USA']})

# 创建一个使用int作为默认值的defaultdict

dd_int = defaultdict(int)

print(dd_int['Europe'])  # 输出:05. namedtuple

namedtuple用于创建一个简单的类,用于存储具有固定字段的数据。

from collections import namedtuple

# 创建一个名为Country的namedtuple,包含name和population两个字段

Country = namedtuple('Country', ['name', 'population'])

# 创建一个Country对象

china = Country(name='China', population=1400000000)

# 访问字段

print(china.name)  # 输出:'China'

print(china.population)  # 输出:1400000000

非常抱歉,确实没有写完。下面是OrderedDict和ChainMap的完整样例,以及collections模块的总结。

6. OrderedDict

OrderedDict是一个保持元素插入顺序的字典。

from collections import OrderedDict

# 创建一个OrderedDict对象

od = OrderedDict()

od['Asia'] = ['China', 'India']

od['America'] = ['USA', 'Brazil']

od['Europe'] = ['Russia', 'Germany']

# 遍历有序字典

for continent, countries in od.items():

print(continent, countries)

# 输出可能是:

# Asia ['China', 'India']

# America ['USA', 'Brazil']

# Europe ['Russia', 'Germany']

# 移动元素到开头

od.move_to_end('Asia', last=False)

print(od)  # 输出:OrderedDict([('Asia', ['China', 'India']), ('America', ['USA', 'Brazil']), ('Europe', ['Russia', 'Germany'])])

# 弹出元素

popped_item = od.popitem(last=False)

print(popped_item)  # 输出可能是:('Asia', ['China', 'India'])

print(od)  # 输出:OrderedDict([('America', ['USA', 'Brazil']), ('Europe', ['Russia', 'Germany'])])7. ChainMap

ChainMap用于创建一个包含多个字典的单一视图,可以在多个字典中查找键。

from collections import ChainMap

# 创建两个字典

dict1 = {'China': 'Asia', 'USA': 'America'}

dict2 = {'India': 'Asia', 'Brazil': 'America', 'Russia': 'Europe'}

# 使用ChainMap合并这两个字典

chained_dict = ChainMap(dict1, dict2)

# 访问键

print(chained_dict['China'])  # 输出:'Asia' (优先从dict1中查找)

print(chained_dict['India'])  # 输出:'Asia' (从dict1中未找到,则从dict2中查找)

print(chained_dict['Russia'])  # 输出:'Europe' (只在dict2中找到)

# 修改ChainMap中的值

chained_dict['China'] = 'New Asia'

print(chained_dict['China'])  # 输出:'New Asia'

# 添加新值

chained_dict['Japan'] = 'Asia'

print(chained_dict['Japan'])  # 输出:'Asia'

# 链中的字典可以动态变化

new_dict = {'Australia': 'Oceania'}

chained_dict.maps.append(new_dict)

print(chained_dict['Australia'])  # 输出:'Oceania'collections模块总结

collections模块为Python提供了许多有用的数据结构,这些数据结构扩展了Python内置的数据类型,使得处理复杂数据更加高效和方便。

•Counter:用于计数可哈希对象,返回一个字典,键是元素,值是计数。

•deque:双端队列,支持从两端添加和删除元素,适用于需要频繁在两端进行操作的场景。

•defaultdict:带有默认值的字典,当访问字典中不存在的键时,返回默认值,而不是引发错误。

•namedtuple:用于创建一个简单的类,用于存储具有固定字段的数据,比直接使用字典更节省空间。

•OrderedDict:保持元素插入顺序的字典,可以记住元素添加的顺序。

•ChainMap:创建一个包含多个字典的单一视图,可以在多个字典中查找键,并按顺序访问它们。

这些数据结构在特定应用场景中提供了更加高效和直观的处理方式,是Python程序员处理复杂数据的强大工具。根据具体需求,可以选择合适的数据结构来优化代码。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OS_m_FTgtuW-ZGKprzY_cueA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券