python中collections库用法详解(OrderedDict、counter、elements、most_common、subtract)
1、OrderedDict
OrderedDict是一个字典子类,它会记住首次插入键的顺序。dict()和 OrderedDict()之间的唯一区别是:
OrderedDict保留插入键的顺序。常规字典不跟踪插入顺序并迭代它以任意顺序给出值。相比之下,OrderedDict 会记住项目插入的顺序。
示例代码:
from collections import OrderedDict
print("This is a Dict:")
dic = {}
dic['a'] = 1
dic['c'] = 3
dic['b'] = 2
print(dic)
for key, value in dic.items():
print(key, value)
print("This is a Ordered Dict:")
order_dic = OrderedDict()
order_dic['a'] = 1
order_dic['c'] = 3
order_dic['b'] = 2
print(order_dic)
for key, value in order_dic.items():
print(key, value)
运行结果:
如果某个key的value发生变化,那么该key在OrderedDict中的位置不变。
示例代码:
from collections import OrderedDict
print("This is a Dict:")
dic = {}
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
print(dic)
for key, value in dic.items():
print(key, value)
dic['b'] = 22
print(dic)
for key, value in dic.items():
print(key, value)
print("This is a Ordered Dict:")
order_dic = OrderedDict()
order_dic['a'] = 1
order_dic['b'] = 2
order_dic['c'] = 3
print(order_dic)
for key, value in order_dic.items():
print(key, value)
order_dic['b'] = 22
print(order_dic)
for key, value in order_dic.items():
print(key, value)
运行结果:
删除和重新插入相同的键将把它推到后面,因为 OrderedDict,但是,保持插入的顺序。
示例代码:
from collections import OrderedDict
print("This is a Dict:")
dic = {}
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
print(dic)
for key, value in dic.items():
print(key, value)
dic.pop('b')
print(dic)
for key, value in dic.items():
print(key, value)
dic['b'] = 22
print(dic)
for key, value in dic.items():
print(key, value)
print("This is a Ordered Dict:")
order_dic = OrderedDict()
order_dic['a'] = 1
order_dic['b'] = 2
order_dic['c'] = 3
print(order_dic)
for key, value in order_dic.items():
print(key, value)
order_dic.pop('b')
print(order_dic)
for key, value in order_dic.items():
print(key, value)
order_dic['b'] = 22
print(order_dic)
for key, value in order_dic.items():
print(key, value)
运行结果:
move_to_end(key, last=True):
将现有键移动到有序字典的任一端。如果last为 true(默认值),则项目移动到右端;如果last为 false,则项目移动到开头。
示例代码:
from collections import OrderedDict
d = OrderedDict.fromkeys('abcdefg')
print(d)
d.move_to_end('b')
print(d)
d.move_to_end('b', last=False)
print(d)
运行结果:
将字典变成有序字典:
示例代码:
from collections import OrderedDict
dic = {}
dic['a'] = 1
dic['b'] = 2
dic['c'] = 3
order_dic = OrderedDict(dic)
print(dic)
print(order_dic)
运行结果:
2、counter
class collections.
Counter
([iterable-or-mapping])
Counter是用于计算可哈希对象的字典子类。它是一个无序的集合,其元素以字典key的形式存储,并将其计数存储为字典value。 计数允许为包括零或负计数的任何整数值。 Counter类与其他语言的bag或multisets类似。
示例代码:
from collections import Counter
list1 = ['a', 'b', 'c', 'b', 'a', 'b']
c = Counter(list1)
print(c)
print(c.keys())
print(c.values())
运行结果:
Counter({'b': 3, 'a': 2, 'c': 1})
dict_keys(['a', 'b', 'c'])
dict_values([2, 3, 1])
将Counter()函数的结果应用于列表或字典中:
示例代码:
from collections import Counter
s = ['aa', 'bb', 'dad', 'tgf', 'aa', 'vv', 'vv', 'bb', 'aa', 'vv', 'vv', 'vv', 'aa', 'a', 'bb']
ret = Counter(s)
print(ret)
lst1, lst2 = [], []
for i, j in zip(ret.keys(), ret.values()):
lst1.append(i)
lst2.append(j)
print(lst1)
print(lst2)
dic = {lst1[i]: lst2[i] for i in range(len(lst1))}
print(dic)
# 按照字典的值进行排序
a1 = sorted(dic.items(), key=lambda x: x[1])
print(a1)
# 按照字典的值进行逆序排序
a2 = sorted(dic.items(), key=lambda x: -x[1])
print(a2)
# 按照字典的值进行逆序排序2
a3 = sorted(dic.items(), key=lambda x: x[1], reverse=True)
print(a3)
# 按照字典的键进行排序
a4 = sorted(dic.items(), key=lambda x: x[0])
print(a4)
运行结果:
Counter({'vv': 5, 'aa': 4, 'bb': 3, 'dad': 1, 'tgf': 1, 'a': 1})
['aa', 'bb', 'dad', 'tgf', 'vv', 'a']
[4, 3, 1, 1, 5, 1]
{'aa': 4, 'bb': 3, 'dad': 1, 'tgf': 1, 'vv': 5, 'a': 1}
[('dad', 1), ('tgf', 1), ('a', 1), ('bb', 3), ('aa', 4), ('vv', 5)]
[('vv', 5), ('aa', 4), ('bb', 3), ('dad', 1), ('tgf', 1), ('a', 1)]
[('vv', 5), ('aa', 4), ('bb', 3), ('dad', 1), ('tgf', 1), ('a', 1)]
[('a', 1), ('aa', 4), ('bb', 3), ('dad', 1), ('tgf', 1), ('vv', 5)]
3、elements
将元素返回一个迭代器,每次重复的次数与它的次数相同。 元素以任意顺序返回。 如果一个元素的数量少于一个,elements()会忽略它。
示例代码如下:
from collections import Counter
a = Counter(我=4, 爱=5, 你=2)
print(a)
print(list(a))
print(a.elements())
print(list(a.elements()))
运行结果为:
Counter({'爱': 5, '我': 4, '你': 2})
['我', '爱', '你']
<itertools.chain object at 0x00000268379F0E08>
['我', '我', '我', '我', '爱', '爱', '爱', '爱', '爱', '你', '你']
4、most_common
列出n个最常见的元素及其数量。 如果省略n或None,most_common()返回计数器中的所有元素。 具有相同计数的元素可以任意排序:
示例代码如下:
from collections import Counter
a = Counter(我=4, 爱=5, 你=2)
print(a.most_common())
print(a.most_common(2))
运行结果如下:
[('爱', 5), ('我', 4), ('你', 2)]
[('爱', 5), ('我', 4)]
5、subtract
元素从一个迭代器或另一个映射(或计数器)中减去。 像dict.update()一样,但减去计数而不是替换它们。 输入和输出都可以是零或负数。
示例代码如下:
from collections import Counter
a = Counter(我=4, 爱=5, 你=2, 呀=1)
b = Counter(我=1, 爱=2, 你=2, 呀=6)
print(a.subtract(b))
print(a)
print(b)
运行结果为:
None
Counter({'我': 3, '爱': 3, '你': 0, '呀': -5})
Counter({'呀': 6, '爱': 2, '你': 2, '我': 1})
相关文章
- Python中的变量和作用域详解
- Python中生成器和yield语句的用法详解
- Python回调函数用法实例详解
- python:ERROR: No matching distribution found for Pillow==9.1.0的处理(Python 3.6.8)
- PYTHON设计模式,创建型之工厂方法模式
- Python中第三方库Requests库的高级用法详解
- Python中的变量和作用域详解
- Python回调函数用法实例详解
- Python OS库详解(一)——OS库简介与路径操作
- Python Django 常用字段类型
- Python编程:利用python编程实现对基于时间序列的数据(dataframe格式)按照指定时间范围进行单方向关联,不存在的日期补充为默认的NaN
- Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Scale/Scale的Command)
- Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略
- Python每日一练——第19天:循环语句
- 已解决2. Set PROTOCOL_BUPFERS_PYTHON_iMPLEMENTATION=python (but this will use pure-Python parsing and w
- 女生零基础转行学Java还是python好?
- 【python代码】:能在手机上敲 Python 代码几款App
- 从零开始学习python | 实例讲解如何制作Python模式程序
- 【Python成长之路】python并发学习:多进程与多线程的用法及场景介绍
- Python: 字典列表: itemgetter 函数: 根据某个或某几个字典字段来排序列表
- Python对于包的使用
- 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)
- 【Leetcode刷题Python】百分号解码
- 【2023美赛】C题Wordle预测27页中文论文及Python代码详解
- python 继承
- Python语言开发学习之使用Python预测天气