摘要:
问题:希望通过名称来访问元素,减少结构中对位置的依赖性 解决方案:使用命名元组collections.namedtuple()。它是一个工厂方法,返回的是python中标准元组类型的子类,提供给它一个类型名称以及相应的字段名称,它就返回一个可实例化的类,为你以定义好的字段名称传入值等。 命名元组的主 阅读全文
摘要:
问题:想创建一个字典,其本身是另一个字典的子集 解决方案:利用字典推导式(dictionary comprehension)可轻松解决 字典推导式的方案清晰且运行起来很快。 阅读全文
摘要:
问题:提取出序列中的值或者根据某些标准对序列做删减 解决方案:列表推导式、生成器表达式、使用内建的filter()函数 1、列表推导式方法:存在一个潜在的缺点,如果输入数据非常大可能会产生一个庞大的结果,考虑到该问题,建议选择生成器表达式 2、生成器表达式方法: 3、如果筛选标准无法简单表示在列表推 阅读全文
摘要:
问题:想根据字典或者对象实例的某个特定的字典(比如日期)来分组迭代数据 解决方案:itertools.groupby()函数在对数据进行分组时特别有用(前提是先以目标字典进行排序) 阅读全文
摘要:
问题:想在同一个类的实例之间做排序,但是它们并不原生支持比较操作。 解决方案:使用内建的sorted()函数可接受一个用来传递可调用对象的参数key,sorted利用该可调用对象返回的待排序对象中的某些值来比较对象。 使用lambda表达式还是operator.attrgetter()或许只是个人偏 阅读全文
摘要:
问题:想根据一个或多个字典中的值来对列表排序 解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的。 补充说明: 有时候会利用lambda表达式来取代itemgetter()的功能:但是利用itemgetter()会运行的更快一些,所以考虑性能的话,应该使 阅读全文
摘要:
问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的。它的一个非常方便的most_common()方法直接告诉你答案。 在底层实现中,Counter是一个字典,在元素和它们出现的次数间做了映射。 增加元素出现次数可以通过手动 阅读全文
摘要:
问题:如何清理掉到处都是硬编码的切片索引 解决方案:对切片命名 假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式:平面文件flat file是一种包含没有相对关系结构的记录文件): 与其这样做,倒不如对切片进行命名:避免了使用许多神秘难懂的硬编码索引,代码变得清晰 阅读全文
摘要:
问题:从序列中移除重复的元素,但仍然保持剩下的元素顺序不变 解决方案: 1、如果序列中的值时可哈希(hashable)的,可以通过使用集合和生成器解决。 2、如果序列时不可哈希的,想要去除重复项,需要对上述代码稍作修改: key参数的作用是指定一个函数用来将序列中的元素转化为可哈希的类型,如此可以检 阅读全文
摘要:
问题:寻找两个字典中间相同的地方(相同的键、相同的值等) 解决方案:通过keys()或者items()方法来执行常见的集合操作(比如求并集、交集和差集) 这些类型的操作也可用来修改或过滤掉字典中的内容。例如: 总结: 字典的keys()方法、items()方法支持集合操作,但是values()方法不 阅读全文
摘要:
问题:在字典上对数据执行各式各样的计算(比如求最小值、最大值、排序)。 解决方案:利用zip()将字典的键-值对“反转”为值-键对序列。 例如:如下字典存放的股票名称和对应的价格: 进行这些计算时,请注意zip()创建了一个迭代器,它的内容只能消费一次。例如: 注意:当涉及(value,key)对的 阅读全文
摘要:
问题:创建一个字典,同时对字典做迭代或序列化操作时,也能控制其中元素的顺序; 解决方案:可以使用collections模块中的OrderedDict类来控制字典中元素的顺序。当对字典做迭代时,他会严格按照元素初始添加的顺序进行。例如: 当想构建一个映射结构以便稍后对其做序列化或编码成另一种格式时,O 阅读全文