python 输出表格某一列的一个元素_Python中的扩展数据类型

前言

学习Python的同学应该都知道Python中的复合数据类型有tupledictlistset等,但这些数据类型本身是有局限的,比如最典型的dict,其中的key是无序的,有时候我们想要根据其key排序时,就必须自己手动写一个函数或是一段代码来处理,然而实际上,在Python中,对于这类问题已经提供了很好的解决方案,并不需要我们再动手创建一个轮子,这就是我们这一篇要介绍的Python基本库collections

极简类的另类实现

比如我们有时候想记录一些人的姓名、年龄和性别,这时候当然最好是创建一个类了,但是如果利用collections中的一个扩展类namedtuple,则实现这个功能很简单:
from collections import namedtupleperson = namedtuple('person', ['name', 'age', 'gender'])
这样就创建好了有些象一个类的扩展元组,下面我们就可以用这个 person 来记录人员信息了:
p1 = person(name="张三", age=10, gender="男")p1>>> 输出:person(name='张三', age=10, gender='男')
这样子看起来是不是很象类?甚至对于创建的 p1 变量而言,我们依然可以将其当成一个类对象来使用,比如访问 p1 这个人的年龄,可以这样访问:
p1.age>>> 输出:10
namedtuple 的更大功能在于处理数据库对象,当将读取的数据记录当做一个namedtuple时,它的访问就显得更加直观,而且代码就显得可读性更好,也更容易维护。

分类汇总功能的实现

我们在用Excel表格进行统计时,常常会用到它的分类汇总功能,这个功能很强大,它可以依据某一列进行扩展汇总,这在一些特定的场合显得相当有用,在collections中,有一个Counter类,它也同样有类似强大的功能,下面我们给出一些代码展示:
from collections import Counterages = [22,22,23,23,5,5,5,22,9,9,9,9,80,80,81]value_counts = Counter(ages)value_counts.most_common()>>> 输出:[(9, 4), (22, 3), (5, 3), (23, 2), (80, 2), (81, 1)]
从上述代码的输出可以看出, Counter 对象的 most_common 方法将原列表 age 中的数据进行了分类汇总,统计出了每个数字出现的次数,并按照出现次数从多到少的顺序进行了排列。 这个功能我自己经常在用,因为要经常对某些产品表格中的物品进行汇总,用这个方式可以一下子数出每种产品的数量,这在做汇总表时特别有用。

带默认值的字典

使用dict时,如果关键字key不存在,则解释器会抛出异常,如果希望key不存在时,返回一个默认值,就可以用collections中的defaultdict
from collections import defaultdictd1 = defaultdict(lambda: "关键字不存在")d1['a']>>> 输出:'关键字不存在'
当然, defaultdict 还有另一个强大的功能是在设定初始化后,它可以在第一次遇到一个关键字时将其值填充为默认值,比如:
d2 = defaultdict(int)for letter in "I love you and you love me!":    d2[letter] += 1d2

0bd78fd4b755d67d7f051139194ac292.png

从上述输出可以看出,这样就简单地将每个字符出现的次数统计出来了,如果用原来的 dict ,则它是这样的:
d2 = dict()for letter in "I love you and you love me!":    d2[letter] = d2.get(letter,0) + 1d2

d6b65d29fe0d5951eb4305f2c2cef43c.png

尽管后者看起来也不麻烦,但相对而言,前者更简洁一些。

双向列表

我们知道list可以通过append方法在其后进行追加,也可以通过insert在其某个位置插入,当然也可通过remove方法进行删除,但当数据量比较大的时候,用这种插入和删除方法就会变得很慢,这是由于list是线性存储的关系,在collections中有一个deque可以对列表实现高效插入和删除,事实上用该关键字创建的就是一个双向列表,这种方法通常应用于队列和栈操作,比如:
from collections import dequea1 = deque(['a', 'b', 'c'])## 尾部插入a1.append('d')## 头部插入a1.appendleft('e')a1>>> 输出:deque(['e', 'a', 'b', 'c', 'd'])
删除尾部数据和头部数据的方法如下:
## 删除最右边的数据a1.pop()## 删除最左边的数据a1.popleft()a1>>> 输出:deque(['a', 'b', 'c'])
有序字典 在前言中说过dict创建的字典是无序的(但在python3.8的环境中测试似乎有序,请同学们验证),为了解决这个问题,我之前用的方法是将dict的所有key组成一个列表进行排序,之后用循环的方式来将访问对应的键值,在collections中提供了一个OrderedDict类,用它创建的字典会按照创建元素插入的顺序进行排列,这就显得很方便,即按我们想要的字典创建好以后,就可以直接使用,不必担心无序的问题:
from collections import OrderedDictd4 = OrderedDict()d4['a'] = 3d4['b'] = 4d4['c'] = 5d4['d'] = 6d4>>> 输出:OrderedDict([('a', 3), ('b', 4), ('c', 5), ('d', 6)])
小结 在新的Python版本中,关于collections还有几个新增的类,同学们可以在官网查询该标准库的使用。利用这个库的类,有助于我们在读取Excel数据或数据库数据时进行更方便有效的处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值