python之collections模块

Posted 少年阿斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之collections模块相关的知识,希望对你有一定的参考价值。

前言:

import collections
print([name for name in dir(collections) if not name.startswith("_")])
[AsyncIterable, AsyncIterator, Awaitable, ByteString, Callable, ChainMap, Container, Coroutine, 
Counter, Generator, Hashable, ItemsView, Iterable, Iterator, KeysView, Mapping, MappingView, 
MutableMapping, MutableSequence, MutableSet, OrderedDict, Sequence, Set, Sized, UserDict, UserList, 
UserString, ValuesView, abc, defaultdict, deque, namedtuple]

 

1.from collections import namedtuple

from collections import namedtuple

# 定义一个namedtuple类型User,并包含name,sex和age属性。
User = namedtuple(User, [name, sex, age])

# 创建一个User对象
user = User(name=wqb, sex=male, age=24)

# 也可以通过一个list来创建一个User对象,这里注意需要使用"_make"方法
user = User._make([wqb, male, 24])

print(user)
# User(name=‘wqb‘, sex=‘male‘, age=24)

# 获取用户的属性
print(user.name)      
print(user.sex)    
print(user.age)    

        
# 修改对象属性,注意要使用"_replace"方法
user = user._replace(age=22)
print(user)
# User(name=‘wqb‘, sex=‘male‘, age=22)

# 将User对象转换成字典,注意要使用"_asdict"
print(user._asdict())
# OrderedDict([(‘name‘, ‘wqb‘), (‘sex‘, ‘male‘), (‘age‘, 22)])

适用地方:

学生信息系统:

       (名字,年龄,性别,邮箱地址)为了减少存储开支,每个学生的信息都以一个元组形式存放

       如:

       (‘tom‘, 18,‘male‘,‘[email protected]‘ )

       (‘jom‘, 18,‘mal‘,‘[email protected]‘ ) .......

       这种方式存放,如何访问呢?

#!/usr/bin/python3
 
student = (tom, 18, male, tom @ qq.com )
print(student[0])
if student[1] > 12:
    ...
if student[2] == male:  
    ...

出现问题,程序中存在大量的数字index,可阅读性太差,无法知道每个数字代替的含义=》

如何解决这个问题?

方法1:

#!/usr/bin/python3
 
# 给数字带上含义,和元组中一一对应
name, age, sex, email = 0, 1, 2, 3                        
# 高级:name, age, sex, email = range(4)
student = (tom, 18, male, tom @ qq.com )
print(student[name])
if student[age] > 12:
     print(True)
if student[sex] == male:
    print(True)

方法2:

  通过 collections库的 nametuple模块

rom collections import namedtuple
 
# 生成一个Student类
Student = namedtuple(Student, [name, age, sex, email])
 
s = Student(tom, 18, male, [email protected])

print(s.name, s.age, s.sex, s.email)

 

以上是关于python之collections模块的主要内容,如果未能解决你的问题,请参考以下文章

python之collections模块

python之collection模块

python之collection模块

《Python》常用模块之collections模块

python模块之collections

python模块之collections