首页 > 其他分享 >每日一模块-collections

每日一模块-collections

时间:2024-04-18 15:13:51浏览次数:22  
标签:USA 每日 India Asia China 模块 print collections

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

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

import collections
2. 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})

  1. 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']) # 输出:0
5. 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模块的总结。

  1. 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程序员处理复杂数据的强大工具。根据具体需求,可以选择合适的数据结构来优化代码。

标签:USA,每日,India,Asia,China,模块,print,collections
From: https://www.cnblogs.com/sunxiuwen/p/18143530

相关文章

  • 模块联邦 解读应用场景
    是Webpack5的新特性之一,允许在多个webpack编译产物之间共享模块、依赖、页面甚至应用提供了一种轻量级的、在运行时,通过全局变量组合,在不同模块之前进行数据的获取提供了一种解决应用集的官方方案。每个构建都充当一个容器,也可将其他构建作为容器。通过这种方式,每个构建......
  • BOSHIDA DC电源模块的发展趋势和前景展望
    BOSHIDADC电源模块的发展趋势和前景展望随着电子产品的普及和多样化,对电源模块的需求也越来越大。其中,DC电源模块作为一种重要的电源供应方式,在各个领域有着广泛的应用。在过去的几十年里,DC电源模块已经经历了多次技术革新和发展,未来的发展趋势也值得关注。本文将从多个方面对DC......
  • 模块与包
    模块定义一个py文件就是一个模块三层架构:总(分析功能,分配功能)-->分(给每个文件分配任务)-->总(将所有功能综合起来)可以增加程序的健壮性和可读性,增加开发效率模块的来源python解释器内置的模块(直接import调用)自己写的文件别人写好的成熟模块(先用pipinstall,再import)......
  • RTL8731/RTL8733系列双频WiFi模块方案选型参考
    RTL8731有SDIO接口的RTL8731BS-VQ-CG和USB接口的RTL8731BU-CG及RTL8731BU-VQ-CG方案;这是单通道通信,符合IEEE802.11a/b/g/n标准双频WiFi方案;其中RTL8731BU-CG可以支持到HT40,RTL8731BU-VQ-CG和RTL8731BS-VQ-CG只支持到HT20;可以理解成这是支持IEEE802.11a/b/g/n/ac标准RTL881......
  • Python中operator 模块的用法
    operator模块提供了一套与Python的内置运算符对应的高效率函数。1.函数的种类函数包含的种类有:对象的比较运算、逻辑运算、数学运算和序列运算2.比较运算运算函数语法小于lt(a,b)a<b小于等于le(a,b)a<=b大于gt(a,b)a>b大于等于ge(a,b)......
  • 工程化、模块化、组件化 开发工作中这三项有什么区别
    工程化:定义:工程化是一种遵循一定标准和规范,通过工具提高效率、降低成本的开发手段。它涉及整个开发流程的规划和管理,确保项目能够按照预定的目标和质量要求完成。关注点:工程化关注于整体的开发流程、项目结构、工具链的整合以及团队协作等方面。它强调使用工具和自动化手段来优......
  • Python中pathlib 模块的用法
    pathlib模块提供了表示文件系统路径的类,可适用于不同的操作系统。使用pathlib模块,相比于os模块可以写出更简洁,易读的代码。pathlib模块中的Path类继承自PurePath,对PurePath中的部分方法进行了重载,相比于os.path有更高的抽象级别。本文将带你学习如何使用pathlib......
  • Python中itertools 模块的用法
    在Python中,迭代器是一种非常好用的数据结构,其最大的优势就是延迟生成,按需使用,从而大大提高程序的运行效率。而itertools作为Python的内置模块,就为我们提供了一套非常有用的用于操作可迭代对象的函数。常用功能1.count功能详解count(start=0,step=1)函数有两个参数,其中......
  • [Python]OS模块应用
    OS提供许多和操作系统交互的功能,允许访问文件,目录,进程,环境变量等。导入模块,importos获取当前工作目录,os.getcwd()current_dir=os.getcwd()print("当前工作目录:",current_dir)>>>当前工作目录:C:\Users\wuyucun创建目录,os.mkdir()current_dir=os.getcwd()......
  • springboot多模块项目启动经历
    springboot多模块使用@目录springboot多模块使用前言大佬把项目权限给我了,我就先下下来看看学习一下一、识别二、maven配置1.安装maven三、加载刷新总结前言大佬把项目权限给我了,我就先下下来看看学习一下一、识别项目分为母模块和多个子模块,开始idea只是识别了最外层的pom......