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})
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
collectionsPython内置的一个模块,它提供了一些有用的类,用于处理Python的集合类型。这些类包括:Counter、defaultdict、deque、namedtuple等。 1. CounterCounter类是一个用于计数的容器,它可以统计元素出现的次数。可以使用它来创建一个字典,其字典的键是元素,值是元素的数量。Counter类的用法如下: ```python from collections import Counter # 创建一个Counter对象 c = Counter(['a', 'b', 'c', 'a', 'b', 'a']) # 统计元素出现的次数 print(c) # Counter({'a': 3, 'b': 2, 'c': 1}) # 统计前n个出现次数最多的元素 print(c.most_common(2)) # [('a', 3), ('b', 2)] ``` 2. defaultdict类 defaultdict类是一个字典类型,它可以自动为不存在的键分配一个默认值。当使用一个不存在的键时,它会自动创建一个默认值,并返回它。defaultdict类的用法如下: ```python from collections import defaultdict # 创建一个defaultdict对象 d = defaultdict(int) # 添加键值对 d['a'] = 1 d['b'] = 2 # 访问不存在的键 print(d['c']) # 0 ``` 3. deque类 deque类是一个双向队列,它可以在队列的两端进行插入和删除操作。deque类的用法如下: ```python from collections import deque # 创建一个deque对象 d = deque() # 在队列的左边插入元素 d.appendleft(1) d.appendleft(2) # 在队列的右边插入元素 d.append(3) d.append(4) # 访问队列的元素 print(d) # deque([2, 1, 3, 4]) # 从队列的左边删除元素 print(d.popleft()) # 2 # 从队列的右边删除元素 print(d.pop()) # 4 ``` 4. namedtuple类 namedtuple类是一个工厂函数,它可以用来创建一个具有字段名的元组。该类返回的是一个元组子类,它可以像普通元组一样访问元素,但也可以使用字段名来访问元素。namedtuple类的用法如下: ```python from collections import namedtuple # 定义一个namedtuple类型 Point = namedtuple('Point', ['x', 'y']) # 创建一个Point对象 p = Point(1, 2) # 访问元素 print(p.x) # 1 print(p.y) # 2 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值