python学习—collections模块学习

tuple的功能:
1.tuple是不可变的,具有迭代(iterable)性
2.拆包用法:name,age,height = ('kang',22,179)
3.元组不是绝对不可变的,可对tuple中的列表等进行操作

4.tuple的immutable的重要性,即不可变性地重要性,可将元组整体作为字典的键

from collections import namedtuple
*other,address = ('kang',22,179,'beijing')#拆包用法
a = ('a',[33,44,55])
a[1].append(66)#不是绝对不可变的
user = ('kang',32,175,'nankang')
user_dict = {}
user_dict[user] = 'lily'#可整体作为字典的键
print(a)
print(other,address)
print(user_dict)
('a', [33, 44, 55, 66])
['kang', 22, 179] beijing
{('kang', 32, 175, 'nankang'): 'lily'}

1.namedtuple的用法

from collections import namedtuple
class Test(object):
    def __init__(self,name,age,height):
        self.name = name
        self.age = age
        self.height = height
test = Test('kang',23,173)
print('class result:',test.name,test.age,test.height)

User = namedtuple('user',['name','age','height','edu']) #在此处相当于运用namedtuple创建了一个类User,与Test类达到一样的效果,可方便地添加变量
user_tuple = ('kang',23,173)#将变量信息先储存在元组中
user_dict = {'name':'kang','age':23,'height':173}#将变量信息先储存在字典中
user = User(*user_tuple,'master')#将元组变量放入user中需要用*,这个*即是变量参数中的*,见函数functions(*args,**kwargs)
user2 = User(**user_dict,edu = 'master')#当将字典的信息传入user中时需要用**,且需要指定添加的信息传入到哪个变量,比如edu = 'master'
def functions(*args,**kwargs):
    pass
functions('kang',26)#当没有注明传入的变量具体名称时是将参数传入args中
functions(name = 'kang',age = 26)#当注明了传入的变量具体名称时将参数传入kwargs中

print('namedtuple result:',user.name,user.age,user.height,user.edu)

class result: kang 23 173
namedtuple result: kang 23 173 master

2.defaultdict的用法

from collections import defaultdict
user = ['a','b','c','a','c','c','b','a','a','c']
#一般应用defaultdict的字典存储功能进行频数的计算
user_dict = {}#运用字典的形式进行数量的统计
for i in user:
    user_dict.setdefault(i,0) #若i不在user_dict中的话则将user_dict[i]设置为0
    user_dict[i] += 1
print(user_dict)

default_dict = defaultdict(int)#将一开始的字典运用defaultdict进行处理,其中int指定对象数据类型是int
for j in user:
    default_dict[j] += 1#此时不需要再进行字典中键的判断,只需要一行语句进行处理归总,进行频数计算
print(default_dict)

def gen_default():
    return {'name':'','nums':0}
test_dict = defaultdict(gen_default)#defaultdict除了可以传入类型,也可以传入自己编辑的函数,但是函数的返回值需要是特定的结构,比如list,dict等
test_dict['group']
{'a': 4, 'b': 2, 'c': 4}
defaultdict(<class 'int'>, {'a': 4, 'b': 2, 'c': 4})
{'name': '', 'nums': 0}

3.deque的用法

#deque的用法有点类似于list的用法,只是deque可以双向操作,或称为双端队列
#deque是线程安全的,liist不是线程安全的
from collections import deque
test_list = deque(['a','b'])
test_list.appendleft('c')
print(test_list)
deque(['c', 'a', 'b'])

4.counter的用法

from collections import Counter
user = ['a','b','c','a','c','c','b','a','a','c']
user_count = Counter('abcjdhegjasdhdhfjdfbs')
user_count.update('egja')#可以将新的数据传入
user_count.most_common(2)#将两个频数最大的项目输出
[('j', 4), ('d', 4)]

5.ordereddict的用法

from collections import OrderedDict #ordereddict按照输入的顺序进行排序
user_dict = OrderedDict()
user_dict['a'] = 'user1'
user_dict['c'] = 'user3'
user_dict['b'] = 'user2'
user_dict.move_to_end('a')
print(user_dict.popitem())
user_dict
('a', 'user1')

OrderedDict([('c', 'user3'), ('b', 'user2')])

6.ChainMap的用法

from collections import ChainMap #相当于是字典的连接
a_dict = {'a':'name','b':'age'}
b_dict = {'c':'sex','d':'edu'}
new_dict = ChainMap(a_dict,b_dict)
for i,name in new_dict.items():
    print(i,name)
new_dict.maps
b age
d edu
c sex
a name
[{'a': 'name', 'b': 'age'}, {'c': 'sex', 'd': 'edu'}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值