跳转到主要内容

不区分大小写的可导出字典

项目描述

Test Status Coverage Latest Version License

安装

您可以从PyPI安装pydicti的最新版本

pip install pydicti

或者,您可以直接取用文件pydicti.py并与您的应用程序一起重新分发。

概述

  • class dicti: 默认不区分大小写的字典类型

  • class odicti: 有序不区分大小写的字典类型

  • def build_dicti: 创建不区分大小写的字典类

  • def Dicti: 创建字典的不区分大小写副本

dicti

类型为dicti的对象是不区分大小写的字典,具有不区分大小写的项目访问功能

>>> d = dicti(Hello='foo', world='bar')
>>> d['heLLO']
'foo'
>>> 'WOrld' in d
True

然而,内部键保留其原始大小写

>>> sorted(d.keys())
['Hello', 'world']

odicti

odicti类型实例化顺序保持的不区分大小写的字典

>>> odicti(zip('abc', range(3)))
Dicti(OrderedDict([('a', 0), ('b', 1), ('c', 2)]))

build_dicti

使用build_dicti可以创建自定义的不区分大小写的字典。此函数用于创建pydicti.dictipydicti.odicti类型。请注意,使用相同的参数多次调用build_dicti将导致相同类型的实例

>>> build_dicti(dict) is dicti
True
>>> build_dicti(OrderedDict) is odicti
True

build_dicti使用子类化继承给定基本字典类型的语义

>>> issubclass(odicti, OrderedDict)
True

Dicti

Dicti函数方便创建字典实例的不区分大小写副本

>>> o = OrderedDict(zip('abcdefg', range(7)))
>>> oi = Dicti(o)
>>> type(oi) is odicti
True

JSON

子类化方法允许将您的字典实例插入到使用isinstance进行类型检查的地方,如json模块中

>>> import json
>>> d == json.loads(json.dumps(d), object_hook=dicti)
True

您可以使用 json.loads(s, object_pairs_hook=odicti) 来反序列化有序字典。

陷阱

等价比较尝试保持基类型的语义以及自反性。这会影响比较运算符的传递性

>>> i = dicti(oi)
>>> roi = odicti(reversed(list(oi.items())))
>>> roi == i and i == oi
True
>>> oi != roi and roi != oi  # NOT transitive!
True
>>> oi == i and i == oi      # reflexive
True

Python中的强制转换规则允许在类型之间进行比较时工作得相当好,这些类型是彼此的子类。但是请注意,否则可能会有问题。

许可证

版权所有 © 2013 托马斯·格莱斯勒 <t_glaessle@gmx.de>

本作品是免费的。您可以在Sam Hocevar发布的《Do What The Fuck You Want To Public License》第2版下重新分发或修改它。有关更多详细信息,请参阅COPYING文件。

本程序是免费软件。根据适用的法律,它不提供任何保证。

变更日志

1.2.0

日期:2023年2月25日

  • 修复了__or____ior__的错误行为,请参阅#8

1.2.0

日期:2022年12月15日

  • 添加类型提示

1.1.6

日期:2021年11月4日

  • 更新首页上的徽标

1.1.5

日期:2021年11月4日

  • 维护版本,用于测试使用GitHub Actions自动发布的版本

1.1.4

日期:2020年10月17日

  • 在python3中使用str.casefold()

  • 将规范化函数作为build_dict的参数,以便传递用户定义的规范化函数

1.1.3

日期:2019年6月28日

  • 避免在__setitem__中的键重新计算

1.1.2

日期:2019年6月28日

  • 在odicti中保持赋值下的项目顺序不变(#2)

  • 在赋值下保持键的大小写不变

1.1.1

日期:2019年3月25日

  • 修复过时的MutableMapping导入(在py38上出错)

1.1.0

日期:2019年3月19日

  • 删除对py2.6的支持

  • 修复long_description中的版本号

1.0.0

日期:2019年3月19日

  • 使字符串表示更类似于字典

  • 其他清理

0.0.6

日期:2016年9月8日

  • 修复在UTF-8不是默认编码时设置时的UnicodeDecodeError

0.0.5

日期:2016年5月18日

  • 修复py 3.5上的pickling

  • 现在build_dicti的‘name’参数可以是qualname

0.0.4

日期:2014年2月1日

  • 添加覆盖率报告

  • 使用更广泛的单元测试

  • 添加对pickle的支持

0.0.3

日期:2014年1月26日

  • 添加对python26的支持

  • 将对OrderedDict的依赖项设置为可选

  • 迁移到setuptools以使用测试命令

  • 支持ordereddict.OrderedDict作为后备

0.0.2

日期:2013年12月29日

  • 修复dicti.pop

  • 支持deepcopy(dicti)

  • 使nose测试自动执行doctests

项目详细信息


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

pydicti-1.2.1.tar.gz (11.1 kB 查看散列)

构建分发

pydicti-1.2.1-py2.py3-none-any.whl (9.0 kB 查看散列)

上传于 Python 2 Python 3

由以下支持