文章分类 - Python之石
他山之石
摘要:过滤序列元素 问题 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 解决方案 最简单的过滤序列元素的方法就是使用列表推导。比如: mylist=[1,4,5,2,-9,-3,9,-3.14] greater_than_zero=[i for i in mylist if i>0]
阅读全文
摘要:通过某个字段将记录分组 问题 你有一个字典或者实例的序列,然后你想根据某个特定的字段比如 date 来分组迭代访问。 解决方案 itertools.groupby() 函数对于这样的数据分组操作非常实用。为了演示,假设你已经有了下列的字典列表: rows = [ {'address': '5412
阅读全文
摘要:排序不支持原生比较的对象 问题 你想排序类型相同的对象,但是他们不支持原生的比较操作。 解决方案 内置的 sorted() 函数有一个关键字参数 key ,可以传入一个 callable 对象给它,这个 callable 对象对每个传入的对象返回一个值,这个值会被 sorted 用来排序这些对象。比
阅读全文
摘要:通过某个关键字排序一个字典列表 问题 你有一个字典列表,你想根据某个或某几个字典字段来排序这个列表。解决方案 通过使用 operator 模块的 itemgetter 函数,可以非常容易的排序这样的数据结构。假设你从数据库中检索出来网站会员信息列表,并且以下列的数据结构返回: rows = [ {'
阅读全文
摘要:序列中出现次数最多的元素 问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的,它甚至有一个有用的most_common() 方法直接给了你答案。 为了演示,先假设你有一个单词列表并且想找出哪个单词出现频率最高。你可以这样做:
阅读全文
摘要:命名切片 问题 如果你的程序包含了大量无法直视的硬编码切片,并且你想清理一下代码。 解决方案 假定你要从一个记录(比如文件或其他类似格式)中的某些固定位置提取字段: ###### 012345678901234567890123456789012345678901234567890123456789
阅读全文
摘要:删除序列相同元素并保持顺序 问题 怎样在一个序列上面保持元素顺序的同时消除重复的值? 解决方案 如果序列上的值都是 hashable 类型,那么可以很简单的利用集合或者生成器来解决这个问题。比如: def dedupe(items): seen=set() for item in items: if
阅读全文
摘要:查找两字典的相同点 问题 怎样在两个字典中寻寻找相同点(比如相同的键、相同的值等等)? 解决方案 为了寻找两个字典的相同点,可以简单的在两字典的 keys() 或者 items() 方法返回结果上执行集合操作。比如: #具有相同的键 a_b_same = a.keys() & b.keys() pr
阅读全文
摘要:问题 怎样在数据字典中执行一些计算操作(比如求最小值、最大值、排序等等)?解决方案 考虑下面的股票名和价格映射字典: prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75 } 为了对字典值
阅读全文
摘要:字典排序 问题 你想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序。 解决方案 为了能控制一个字典中元素的顺序,你可以使用 collections 模块中的OrderedDict 类。在迭代操作的时候它会保持元素被插入时的顺序,示例如下: from collections impo
阅读全文
摘要:字典中的键映射多个值 问题 怎样实现一个键对应多个值的字典(也叫 multidict)? 解决方案 一个字典就是一个键对应一个单值的映射。如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中,比如列表或者集合里面。比如,你可以像下面这样构造这样的字典: d={ 'a':[1,2,3],
阅读全文
摘要:1.4 查找最大或最小的 N 个元素 普及heapq模块的用法: #堆模块heapq import heapq #初始化h h=[9,5] #把3入堆 heapq.heappush(h,3) print(h) #[3, 5, 9] #把7入堆 heapq.heappush(h,7) print(h)
阅读全文
摘要:1.3 保留最后 N 个元素 问题 在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案 保留有限历史记录正是 collections.deque 大显身手的时候。比如,下面的代码在多行上面做简单的文本匹配,并返回匹配所在行的最后 N 行: from collections
阅读全文
摘要:1.2 解压可迭代对象赋值给多个变量 问题 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError 。那么怎样才能从这个可迭代对象中解压出 N 个元素出来? 解决方案 Python 的星号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期末的时候,你想统计下家庭作业的平
阅读全文
摘要:Python 提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些数据结构是很简单的。但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题。因此,这一章的目的就是讨论这些比较常见的问题和算法。另外,我们也会给出在集合模块 collections 当中操作这些数据结构的
阅读全文