扩展zip()和itertools.zip_longest()以生成命名元组。

namedzip的Python项目详细描述


licensepypipyversionswheelbuilddocs

这个python包实现了namedzipnamedzip_longest,它们分别扩展了zipitertools.zip_longest,以生成命名元组。

安装

$ pip install namedzip

用法示例

>>>fromnamedzipimportnamedtuple,namedzip,namedzip_longest

namedzipnamedzip_longest可以与可iterable参数一起使用, 像它们扩展的接口一样,返回生成器对象:

>>>x_vals=[1,2,3]>>>y_vals=[9,8]>>>Point=namedtuple("Point",["x","y"])>>>>>>forpointinnamedzip(Point,x_vals,y_vals):...print(point)...Point(x=1,y=9)Point(x=2,y=8)>>>>>>forpointinnamedzip_longest(Point,x_vals,y_vals):...print(point)...Point(x=1,y=9)Point(x=2,y=8)Point(x=3,y=None)>>>

或者不带iterable参数返回可重用函数对象:

>>>zip_points=namedzip(Point)>>>forpointinzip_points(x_vals,y_vals):...print(point)...Point(x=1,y=9)Point(x=2,y=8)>>>>>>zip_points=namedzip_longest(Point)>>>forpointinzip_points(x_vals,y_vals):...print(point)...Point(x=1,y=9)Point(x=2,y=8)Point(x=3,y=None)>>>

就像itertools.zip_longestnamedzip_longest接受自定义的fillvalue

>>>iterables=[(1,2),(9,8,7),(11,22)]>>>Point3D=namedtuple("Point3D",["x","y","z"])>>>>>>forpointinnamedzip_longest(Point3D,*iterables,fillvalue=0):...print(point)...Point3D(x=1,y=9,z=11)Point3D(x=2,y=8,z=22)Point3D(x=0,y=7,z=0)>>>

但是namedzip_longest也允许使用单独的默认值 在命名元组或函数调用中指定的值。

>>>iterables=[(1,2),(9,8,7),(11,22)]>>>Point3D=namedtuple("Point3D",["x","y","z"],defaults=(100,1,0))>>>>>>forpointinnamedzip_longest(Point3D,*iterables):...print(point)...Point3D(x=1,y=9,z=11)Point3D(x=2,y=8,z=22)Point3D(x=100,y=7,z=0)>>>>>>forpointinnamedzip_longest(Point3D,*iterables,defaults=(77,88,99)):...print(point)...Point3D(x=1,y=9,z=11)Point3D(x=2,y=8,z=22)Point3D(x=77,y=7,z=99)>>>

这怎么可能有用呢?

这个包背后的思想是帮助提高在以下情况下的可读性 您还需要迭代多个数据集合/流。 以允许单独的默认值,如上面所示。

namedzip不需要修改索引或解包长元组,而是允许您 使用点表示法按属性名访问聚合值。

sensor_data=[fahrenheit_vals,humidity_vals,wind_mph_vals,pressure_hpa_vals]Data=namedtuple("Data",("temp_f","humidity","wind_mph","pressure_hpa"))zip_data=namedzip_longest(Data,defaults=(57.2,68.3,17.1,1016.93))fordatainzip_data(*sensor_data):temp_c=(data.temp_f-32)/1.8wind_knots=data.wind_mph/1.15078pressure_atm=data.pressure_hpa/1013.25dew_point=calculate_dew_point(temp_c,data.humidity)# NOTE: The formulas used above may not be accurate.

文档

其他文档可在https://namedzip.readthedocs.io/en/latest/找到。

开发设置

克隆回购:

$ git clone https://github.com/erberlin/namedzip.git
$ cd namedzip

在Windows上创建和激活虚拟环境:

> python -m venv venv
> venv\Scripts\activate

在OS X&Linux上创建和激活虚拟环境:

$ python3 -m venv venv
$ source venv/bin/activate

安装开发包:

$ pip install -r requirements.txt

运行测试套件:

$ pytest -v

柏林埃里克-erberlin.dev@gmail.com

根据麻省理工学院的许可证发行。有关详细信息,请参见LICENSE

https://github.com/erberlin/namedzip

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaMaven在试图定义模块时不将EJB识别为项目的依赖项   oracle如何将Java SQL数组作为参数传递给JPA本机查询?   Java解析带有整数和字符串的文本文件   客户端的java使用。在CXF Rest客户端中重置   Java:通过ID调用类   java如何在MapBox Android SDK上使用FitBounds?   java sparkjava:从InputStream将PNG作为base64加载   初始化后JScrollPane+JTree显示的java问题   java htmlunit单个测试通过,但在测试套件中运行失败   为什么java常量声明为静态的?   安卓将值从activity传递到fragment给出错误java。lang.NullPointerException   java如何使用POI设置空白excel单元格   javascript Cordova上下左右按钮   java所需字符串“contactID”参数不存在   java NoClassDefFoundError和其他引用Google Maps Android API实用程序时出现的错误   macos用Java代码打开下载的JAR文件   java扩展RoboActivity产生ClassNotFoundException   java如何使用中断通道下载文件?(NIO)