Python的collections模块中namedtuple结构实例用法总结

  • 时间:
  • 1683人关注

namedtuple顾名思义,就是名字+元组的数据结构,下面就来看一下Python的collections模块中namedtuple结构使用示例,另外这篇文章主要知识点是关于Python、collections、namedtuple、Python的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

namedtuple 就是命名的 tuple,比较像 C 语言中 struct。一般情况下的 tuple 是 (item1, item2, item3,...),所有的 item 都只能按照 index 访问,没有明确的称呼,而 namedtuple 就是事先把这些 item 命名,以后可以方便访问。

from collections import namedtuple


# 初始化需要两个参数,第一个是 name,第二个参数是所有 item 名字的列表。
coordinate = namedtuple('Coordinate', ['x', 'y'])

c = coordinate(10, 20)
# or
c = coordinate(x=10, y=20)

c.x == c[0]
c.y == c[1]
x, y = c

namedtuple 还提供了 _make 从 iterable 对象中创建新的实例:

coordinate._make([10,20])

 

再来举个栗子:

# -*- coding: utf-8 -*-
"""
比如我们用户拥有一个这样的数据结构,每一个对象是拥有三个元素的tuple。
使用namedtuple方法就可以方便的通过tuple来生成可读性更高也更好用的数据结构。
"""
from collections import namedtuple
websites = [
 ('Sohu', 'http://www.google.com/', u'张朝阳'),
 ('Sina', 'http://www.sina.com.cn/', u'王志东'),
 ('163', 'http://www.163.com/', u'丁磊')
]
Website = namedtuple('Website', ['name', 'url', 'founder'])
for website in websites:
 website = Website._make(website)
 print website
 print website[0], website.url

 

结果:

Website(name='Sohu', url='http://www.google.com/', founder=u'\u5f20\u671d\u9633')
Sohu http://www.google.com/
Website(name='Sina', url='http://www.sina.com.cn/', founder=u'\u738b\u5fd7\u4e1c')
Sina http://www.sina.com.cn/
Website(name='163', url='http://www.163.com/', founder=u'\u4e01\u78ca')
163 http://www.163.com/

 

码农之家
JAVA集合框架工具类自定义Collections集合方法

7小时6分钟前回答

JAVA集合框架工具类自定义Collections集合方法

项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式。 话不多说,看代码:

1、封装的自定义集合工具类:CollectionsCustom

package com.test.util;
import java.util.Collection;
import org.apache.commons.collections.CollectionUtils;
/**
 * 自定义集合处理类
 */
public class CollectionsCustom { 
  /**
   * 将传入的collection内对象进行计算后得出结果
   * @param original    计算前collection
   * @param reduceFunction 计算方式
   * @param initValue   计算结果初始值
   * @param <Input>    collection对象类型
   * @param <Output>    结果类型
   * @return
   */
  public static <Input, Output> Output reduce(Collection<Input> original, Output initValue, ReduceFunction<Input, Output> reduceFunction) {
    Output result = initValue;
    if (CollectionUtils.isEmpty(original)) {
      return result;
    }
    if (reduceFunction == null) {
      return result;
    }
    for (Input input : original) {
      result = reduceFunction.apply(input, result);
    }
    return result;
  }
  /**
   * 自定义计算接口
   * @param <Input>
   * @param <Result>
   */
  public interface ReduceFunction<Input, Result> {
    Result apply(Input input, Result lastResult);
  }
}

2、测试类TestCollections

package com.test;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import com.test.util.CollectionsCustom;
public class TestCollection {
 private static List<User> list = Arrays.asList(
  new User("张三", BigDecimal.valueOf(35.6), 18),
  new User("李四", BigDecimal.valueOf(85), 30),
  new User("赵六", BigDecimal.valueOf(66.55), 25));
 public static void main(String[] args) {
 //统计集合内分数之和
 testTotalScore();
 //统计集合内年龄之和
 testTotalAge();
 }
 private static void testTotalScore(){
 //统计集合内分数之和
 BigDecimal totalScore = CollectionsCustom.reduce(list, BigDecimal.ZERO, new CollectionsCustom.ReduceFunction<User, BigDecimal>() {
  @Override
  public BigDecimal apply(User input, BigDecimal lastResult) {
  // TODO Auto-generated method stub
  return lastResult.add(input.getScore());
  }
 });
 System.out.println("总共分数:" + totalScore);
 }
 private static void testTotalAge(){
 //统计集合内年龄之和
 Integer totalAge = CollectionsCustom.reduce(list, 0, new CollectionsCustom.ReduceFunction<User, Integer>() {
  @Override
  public Integer apply(User input, Integer lastResult) {
  // TODO Auto-generated method stub
  return lastResult += input.getAge();
  }
 });
 System.out.println("总共年龄:" + totalAge);
 }
 static class User{
 private String userName; //姓名
 private BigDecimal score;//分数
 private Integer age;
 public String getUserName() {
  return userName;
 }
 public void setUserName(String userName) {
  this.userName = userName;
 }
 public BigDecimal getScore() {
  return score;
 }
 public void setScore(BigDecimal score) {
  this.score = score;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }
 public User(String userName, BigDecimal score, Integer age) {
  super();
  this.userName = userName;
  this.score = score;
  this.age = age;
 }
 public User() {
  // TODO Auto-generated constructor stub
 }
 }
}

3、测试输出结果:

总共分数:187.15
总共年龄:73

这里如果传入的是封装类型Integer等,最好自己做下非空处理。相信高质量的封装代码能为你自己加分的!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对码农之家的支持。如果你想了解更多相关内容请查看下面相关链接

展开阅读

上一篇:python使用fcntl模块实现程序加锁的方法

下一篇:如何进行python开发环境搭建

相关内容

  • Python中glob模块查找文件路径的实例方法

    glob模块遵循Unix的shell规则来匹配文件名进行文件查找,下面我们结合匹配相关的字符区间与通配符知识,来简单掌握Python中glob模块查找文件路径的用法

    11-23简单掌握Python中glob模块查找文件路径的用法

    阅读更多
  • Python中smtplib模块处理电子邮件的知识点

    这篇文章主要介绍了举例详解Python中smtplib模块处理电子邮件的使用,是Python入门学习中的基础知识,需要的朋友可以参考下

    02-15举例详解Python中smtplib模块处理电子邮件的使用

    阅读更多
  • python使用fcntl模块实现程序加锁的方法

    这篇文章主要介绍了python使用fcntl模块实现程序加锁功能,较为详细的分析了fcntl模块的具体功能并结合实例形式给出了Python实现程序加锁的操作技巧,需要的朋友可以参考下

    04-13python使用fcntl模块实现程序加锁功能示例

    阅读更多
  • Python爬取豆瓣电影数据并且提取值xpath和lxml模块的代码讲解

    本篇文章给大家带来的内容是关于Python爬取豆瓣电影数据并且提取值xpath和lxml模块(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。​

    06-17Python爬取豆瓣电影数据并且提取值xpath和lxml模块

    阅读更多
  • python中排序操作和heapq模块的实例用法

    本篇文章给大家带来的内容是关于python中的排序操作和heapq模块的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。​

    12-05python中的排序操作和heapq模块的介绍(代码示例)

    阅读更多
  • Python机器学习(第2版)

    Python机器学习(第2版)

    本书将机器学习背后的基本理论与应用实践联系起来,通过这种方式让读者聚焦于如何正确地提出问题、解决问题。书中讲解了如何使用Python的核心元素以及强大的机器学习库,同时还展示了如何正确使用一系列统计模型。

    大小:109 MB Python

    点击下载
  • Python 快速入门:第3版 配套资源

    Python 快速入门:第3版 配套资源

    Python 快速入门(第3版)配套资源 这是一本Python快速入门书,基于Python 3.6编写,分为4个部分,第一部分讲解Python的基础知识,对Python进行概要的介绍,第二部分介绍Python编程的重点,第三部分阐释Python的高级特性,第四部分关注数据处理,最后给出了相关案例。 本书框架结构清晰,内容编排合理,讲解循序渐进,并结合大量示例和题目,既适合Python初学者学习,也适合作为专业程序员的Python参考书。

    大小:23 MBPython入门

    点击下载
  • Python机器学习基础教程

    Python机器学习基础教程

    这是一本机器学习入门书,以Python语言介绍,包含机器学习的基本概念及其应用;实践中最常用的机器学习算法以及这些算法的优缺点;待处理数据的呈现方式的重要性等内容

    大小:28.3 MBPython

    点击下载
  • Python数据抓取技术与实战

    Python数据抓取技术与实战

    这本书通过数据抓取篇(如何获得数据信息)、数据分析篇(分析挖掘,提取出有价值的信息)、数据可视化篇(以直观清晰的图形表示出关键的数量关系和概念)详细的描述数据抓取、分析、展示的整个流程,而且每一篇自成一体,可以单独学习掌握

    大小:59.3 MBPython

    点击下载

学习笔记

3小时51分钟前回答

Collections.shuffle()方法实例解析

本文研究的主要是Collections.shuffle()方法的相关内容,下面看看具体内容。 Java.util.Collections类下有一个静态的shuffle()方法,如下: 1)static void shuffle(List? list) 使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。 2)static void shuffle(List? list, Random rand) 使用指定的随机源对指定列表进行置换,所有置换发生的可能性都是大致相等的,假定随机源是公平的。 通俗一点的说,就像洗牌一样,随机打乱原来的顺序。 注意:如果给定一个整型数组,用Arrays.asList()方法将其转化为一个集合类,有两种途径: 1)用ListInteger list=ArrayList(Arrays.asList(ia)),用shuffle()打乱不会改变底层数组的顺序。 2)用Li……

16小时52分钟前回答

详解Python 中的容器 collections

写在之前 我们都知道 Python 中内置了许多标准的数据结构,比如列表,元组,字典等。与此同时标准库还提供了一些额外的数据结构,我们可以基于它们创建所需的新数据结构。 Python 附带了一个「容器」模块 collections,它包含了很多的容器数据类型,今天我们来讨论其中几个常用的容器数据类型,掌握了这几个可以减少我们重复造轮子所带来的烦扰。 namedtuple 相信你已经熟悉了元组。一个元组相当于一个不可变的列表,你可以存储一个数据的序列。这里要说的 namedtuple(命名元组)和元组非常像,它们都不能修改自己的数据。说完了像,那么它们有哪些地方不像呢? 作为元组,为了获取其中的数据,……