详解Python中映射类型的内建函数和工厂函数


Posted in Python onAugust 19, 2015

1.基本函数介绍

(1)标准类型函数[type()、str()和 cmp()]
        对一个字典调用type()工厂方法,会返回字典类型:“<type 'dict'>”。调用str()工厂方法将返回该字典的字符串表示形式。
        字典是通过这样的算法来比较的:首先是字典的大小,然后是键,最后是值。可是用cmp()做字典的比较一般不是很有用。
 

 算法按照以下的顺序:
首先比较字典长度
        如果字典的长度不同,那么用cmp(dict1, dict2)比较大小时,如果字典dict1比dict2长,cmp()返回正值,如果dict2比dict1长,则返回负值。也就是说字典中的键的个数越多,这个字典就越大,即:len(dict1) > len(dict2) ==> dict1 > dict2。
其次比较字典的键
        如果两个字典的长度相同,那就按字典的键比较。键比较的顺序和keys()方法返回键的顺序相同。(注意: 相同的键会映射到哈希表的同一位置,这保证了对字典键的检查的一致性)。这时,如果两个字典的键不匹配时,对这两个(不匹配的键)直接进行比较。当dict1中第一个不同的键大于dict2中第一个不同的键,cmp()会返回正值。
然后比较字典的值
       如果两个字典的长度相同而且它们的键也完全匹配,则用字典中每个相同的键所对应的值进行比较。一旦出现不匹配的值,就对
这两个值进行直接比较。若dict1比dict2中相同的键所对应的值大,cmp()会返回正值。
完全匹配
       到此为止,即每个字典有相同的长度、相同的键、每个键也对应相同的值,则字典完全匹配,返回 0 值。
(2)映射类型相关的函数
 dict()

       工厂函数被用来创建字典,如果不提供参数会生成空字典。当容器类型对象做为一个参数传递给方法 dict(),如果参数是可以迭代的,即一个序列或是一个迭代器或是一个支持迭代的对象,那每个可迭代的元素必须成对出现。在每个值对中,第一个元素是字典的键、第二个元素是字典中的值。

>>> dict(zip(('x', 'y'), (1, 2))) 
  {'y': 2, 'x': 1} 
  >>> dict([['x', 1], ['y', 2]]) 
  {'y': 2, 'x': 1} 
  >>> dict([('xy'[i-1], i) for i in range(1,3)]) 
  {'y': 2, 'x': 1}

        如果输入参数是(另)一个映射对象,比如一个字典对象,对其调用dict()会从存在的字典里复制内容来生成新的字典。新生成的字典是原来字典对象的浅复制版本,它与用字典的内建方法copy()生成的字典对象是一样的。但是从已存在的字典生成新的字典速度比用copy()方法慢,推荐使用copy()。
len()
       内建函数len()很灵活,它可用在序列、映射类型和集合上。对字典调用 len(),它会返回所有元素(键-值对)的数目。
hash()
       内建函数hash()本身并不是为字典设计的方法,但它可以判断某个对象是否可以做一个字典的键。将一个对象作为参数传递给 hash(),会返回这个对象的哈希值。 只有这个对象是可哈希的,才可作为字典的键 (函数的返回值是整数,不产生错误或异常)。如果用比较操作符来比较两个数值,发现它们是相等的,那么即使二者的数据类型不同, 它们也会得到相同的哈希值。如果非可哈希类型作为参数传递给hash()方法,会产生TypeError错误,因此如果使用这样的对象作为键给字典赋值时会出错。

2.映射类型的内建函数和工厂函数使用实例

标准类型函数[type(),str()和cmp()]
字典比较算法

>>> dict1 = {}

>>> dict2 = {'host':'earth','port':80}

>>> cmp(dict1,dict2)

-1

>>> dict1['host'] = 'earth'

>>> cmp(dict1,dict2)

-1

>>> dict1['port'] = 80     

>>> cmp(dict1,dict2)

0

>>> dict1['port'] = 'tcp'

>>> cmp(dict1,dict2)

1

>>> dict2['port'] = 'udp'

>>> cmp(dict1,dict2)  

-1

>>> cdict = {'fruits':1}

>>> ddict = {'fruits':1}

>>> cmp(cdict,ddict)

0

>>> cdict['oranges'] = 0

>>> cdict['apples'] = 0    

>>> cmp(cdict,ddict)

1

映射类型相关的函数

dict()

>>> dict(zip(('x','y'),(1,2)))

{'y': 2, 'x': 1}

>>> dict([['x',1],['y',2]]) 

{'y': 2, 'x': 1}

>>> dict([('xy'[i-1],i) for i in range(1,3)])

{'y': 2, 'x': 1}


>>> dict(x=1,y=2)

{'y': 2, 'x': 1}

>>> dict8 = dict(x=1,y=2)

>>> dict8

{'y': 2, 'x': 1}

>>> dict9 = dict(**dict8)

>>> dict9

{'y': 2, 'x': 1}


>>> dict9 = dict8.copy()

>>> dict9

{'y': 2, 'x': 1}


len()

>>> dict2 = {'name':'earth','port':80}

>>> dict2

{'name': 'earth', 'port': 80}

>>> len(dict2)

2

Python 相关文章推荐
深入讲解Python中面向对象编程的相关知识
May 25 Python
python构建自定义回调函数详解
Jun 20 Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
学习Python列表的基础知识汇总
Mar 10 Python
Django Auth用户认证组件实现代码
Oct 13 Python
python集合的新增元素方法整理
Dec 07 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
如何利用python实现列表嵌套字典取值
Jun 10 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 #Python
Python中字典的基础知识归纳小结
Aug 19 #Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 #Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 #Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 #Python
使用Python操作MySQL的一些基本方法
Aug 16 #Python
Python中list列表的一些进阶使用方法介绍
Aug 15 #Python
You might like
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
python生成指定尺寸缩略图的示例
2014/05/07 Python
详解Python发送邮件实例
2016/01/10 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
Numpy数组的广播机制的实现
2020/11/03 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
世界文化遗产导游词
2015/02/13 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python