python元组和字典的内建函数实例详解


Posted in Python onOctober 22, 2019

本文实例讲述了python元祖和字典的内建函数。分享给大家供大家参考,具体如下:

元组Tuple

元组是序列类型一种,也是不可变类型数据结构,对元组修改后会生成一个新的元组。所以Tuple对象并没有太多的内置方法。

count() 查询一个元素在Tuple中的数量

count(…)

T.count(value) -> integer ? return number of occurrences of value
返回一个value在Tuple出现的次数,即个数。

In [5]: tup = ('My','name','is','Jmilk')
In [6]: tup.count('My')
Out[6]: 1
In [7]: tup.count('my')
Out[7]: 0

index() 查询元素在Tuple中的索引号

index(…)

T.index(value, [start, [stop]]) -> integer ? return first index of value.
Raises ValueError if the value is not present.
返回在指定范围中[start,[stop]],第一次出现的value的索引。

In [15]: tup.index('Jmilk',2,4)
Out[15]: 3

元组的遍历

In [16]: tup
Out[16]: ('My', 'name', 'is', 'Jmilk')
In [17]: for i in tup:
  ....:   print i
  ....:
My
name
is
Jmilk

字典Dictionary

字典数据类型使用键值对的映射关系来关联数据。

创建一个字典对象

简单的创建

In [18]: dic = {'name':'Jmilk','age':23,'city':'BJ'}

fromkey()使用keys来创建字典

fromkeys(…)

dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
v defaults to None.

通过一个keys的序列来创建字典,可以指定keys映射的value,默认为None。

In [125]: newDic = {}.fromkeys(['name','age','city'],'not found')
In [126]: newDic
Out[126]: {'age': 'not found', 'city': 'not found', 'name': 'not found'}

查询

查询字典中key映射的value

In [44]: dic['age']
Out[44]: 23

get()查询Key映射的value,当key不存在时,返回默认值

get(…)

D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.

自动添加(字典的默认值):自动添加是字典数据类型的特性,即使一个Key起初不存在于字典中,也可为Key分配一个值,以此来建立新的项。

In [6]: dic
Out[6]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [7]: dic.get('age',24)
Out[7]: 23
In [8]: dic.get('a',24)
Out[8]: 24

若不使用get()函数去获取一个不存在的key对应的value时,会报错。

len(dictName)获取字典长度

len(…)

len(object) -> integer

Return the number of items of a sequence or mapping.

len()是Python的内建函数,可以获取序列或字典的长度,即元素的个数。

In [34]: len(dic)
Out[34]: 3

keys()列出dict的Keys列表

keys(…)

D.keys() -> list of D's keys

In [22]: dic.keys()
Out[22]: ['city', 'age', 'name']

values()列出dict的values列表

values(…)

D.values() -> list of D's values

In [23]: dic.values()
Out[23]: ['BJ', 23, 'Jmilk']

添加字典项

通过赋值为字典添加一个项

格式:dictName[keyN] = valueN

In [25]: dic
Out[25]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [27]: dic['sex'] = 'man'
In [28]: dic
Out[28]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk', 'sex': 'man'}

通过setdefault()增加

setdefault(…)

D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

当key存在时,call D.get(k,d)方法,即获取key映射的value。当key不存在时,执行D[k]=d,即为dict增加一个新的元素。

In [25]: dic
Out[25]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [26]: dic.setdefault('age',24)
Out[26]: 23
In [27]: dic.setdefault('sex','man')
Out[27]: 'man'
In [28]: dic
Out[28]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk', 'sex': 'man'}

删除字典项

del语句,删除字典中key对应的一个项

del语句可以操作所有的迭代器对象。

In [40]: dic
Out[40]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [41]: del dic['age']
In [42]: dic
Out[42]: {'city': 'BJ', 'name': 'Jmilk'}

popitem() 将随机一个字典键值对弹出(删除并返回)

popitem(…)

D.popitem() -> (k, v), remove and return some (key, value) pair as a
2-tuple; but raise KeyError if D is empty.
以tuple(k,v)的形式删除字典的一个元素,并返回。需要一个接受返回的对象。若字典为空,则报错。

In [32]: dic
Out[32]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk', 'sex': 'man'}
In [34]: dic.popitem()
Out[34]: ('city', 'BJ')
In [35]: dic.popitem()
Out[35]: ('age', 23)

pop()弹出key映射的value

pop(…)

D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
If key is not found, d is returned if given, otherwise KeyError is raised

In [39]: dic
Out[39]: {'name': 'Jmilk', 'sex': 'man'}
In [40]: dic.pop('name')
Out[40]: 'Jmilk'

一般情况下,当字典为空时调用了D.pop()方法的化会触发一个KeyError。但是也可以通过下面的调用方式来添加key不存在时的返回默认值。

当Key不存在时,返回默认值,避免报错:

In [20]: dic
Out[20]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [21]: dic.pop('sex','man')
Out[21]: 'man'

clear()清空字典中的所有项

clear(…)

D.clear() -> None. Remove all items from D.

清空所有项目,返回None。

In [58]: dic
Out[58]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [59]: dic.clear()
In [60]: dic
Out[60]: {}

修改

简单的修改dict中key映射的value值

格式:“`dictName[key] = newValue

In [50]: dic['city'] = 'GZ'
In [51]: dic
Out[51]: {'age': 23, 'city': 'GZ', 'name': 'Jmilk'}

update()更新字典

update(…)

D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
If E present and has a .keys() method, does: for k in E: D[k] = E[k]
If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v
In either case, this is followed by: for k in F: D[k] = F[k]

使用另一个字典来更新一个字典,通过匹配的key来更新value。

In [137]: dic
Out[137]: {'age': 23, 'city': 'BJ', 'name': ['jmilk']}
In [138]: newInfo = {'name':'chocolate','age':22,'city':'ZH'}
In [139]: dic.update(newInfo)
In [140]: dic
Out[140]: {'age': 22, 'city': 'ZH', 'name': 'chocolate'}

当然,也可以只更新其中若干个value。

字典的复制

copy()浅复制

字典的浅复制与List的浅复制类似,都只是对引用对象的copy。

In [107]: dic1 = dic.copy()
In [108]: dic,dic1
Out[108]:
({'age': 23, 'city': 'BJ', 'name': ['jmilk', 'chocolate']},
 {'age': 23, 'city': 'BJ', 'name': ['jmilk', 'chocolate']})
In [109]: dic1['age'] = 24
In [110]: dic,dic1
Out[110]:
({'age': 23, 'city': 'BJ', 'name': ['jmilk', 'chocolate']},
 {'age': 24, 'city': 'BJ', 'name': ['jmilk', 'chocolate']})

注意:对浅copy得到的新字典中的value做替换操作(替换整个value),是不会影响到元字典的。但是如果对新字典中的value做了修改操作(修改其中一部分),就会影响到原字典。如下:

In [111]: dic1['name'].remove('chocolate')
In [112]: dic,dic1
Out[112]:
({'age': 23, 'city': 'BJ', 'name': ['jmilk']},
 {'age': 24, 'city': 'BJ', 'name': ['jmilk']})

因为两个key的id指向同一个数据对象,对数据对象做了修改(改变数据对象)后就会都受到影响。但替换(改变引用对象)整个value,即将新字典中key的id指向另一个数据对象,不会改变原数据对象。

深copy和浅copy的详细介绍,请参考:https://3water.com/article/172490.htm

类型转换

item() 将每个字典项,转化为Tuple和List的混合数据类型
items(…)
D.items() -> list of D's (key, value) pairs, as 2-tuples

In [42]: dic
Out[42]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [43]: dic.items()
Out[43]: [('city', 'BJ'), ('age', 23), ('name', 'Jmilk')]
In [44]: [x for param in dic for x in dic]  #嵌套列表降维
Out[44]: ['city', 'age', 'name', 'city', 'age', 'name', 'city', 'age', 'name']

因为返回的是List类型对象,所以可以使用索引操作符。

In [46]: dic.items()[0]
Out[46]: ('city', 'BJ')
In [48]: dic.items()[0][0]
Out[48]: 'city'

由此可以看出,可以对一个对象做 操作,主要由对象的类型来决定。

成员关系

判断一个kay是否存在dict中

In [56]: dic
Out[56]: {'age': 23, 'city': 'GZ', 'name': 'Jmilk'}
In [57]: dic.has_key('age')
Out[57]: True

True ⇒ key存在dict中
False ⇒ key不存在dict中

使用成员关系运算符判断

成员资格:'age' in dic只能通过key的成员关系来判断。

In [45]: dic
Out[45]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [46]: 'age' in dic
Out[46]: True
In [47]: 'age' not in dic
Out[47]: False

字典的遍历

In [62]: dic
Out[62]: {'age': 23, 'city': 'GZ', 'name': 'Jmilk'}
In [63]: for key_num,val_num in dic.items():
  ....:   print key_num,val_num
  ....:
city GZ
age 23
name Jmilk

格式化输出value

通过格式化%(key)format来输出映射的value

In [53]: dic
Out[53]: {'age': 23, 'city': 'BJ', 'name': 'Jmilk'}
In [54]: print 'ple call me %(name)s,Thx!' % dic
ple call me Jmilk,Thx!
In [55]: print 'I m %(age)d years old.' % dic
I m 23 years old.

只要key in dict,就能使用任意的转换说明符。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python访问纯真IP数据库的代码
May 19 Python
Python的Django框架中设置日期和字段可选的方法
Jul 17 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
python Django中models进行模糊查询的示例
Jul 18 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
python中uuid模块实例浅析
Dec 29 Python
python实现自动化群控的步骤
Apr 11 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 Python
Python中rapidjson参数校验实现
Jul 25 Python
Python List列表对象内置方法实例详解
Oct 22 #Python
Python序列对象与String类型内置方法详解
Oct 22 #Python
Python基本语法之运算符功能与用法详解
Oct 22 #Python
基于Python实现拆分和合并GIF动态图
Oct 22 #Python
python  logging日志打印过程解析
Oct 22 #Python
安装2019Pycharm最新版本的教程详解
Oct 22 #Python
Python列表list常用内建函数实例小结
Oct 22 #Python
You might like
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
Python实现基本线性数据结构
2016/08/22 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
会计电算化专业应届大学生求职信
2013/10/22 职场文书
护士实习自我鉴定
2013/10/22 职场文书
工程总经理工作职责
2013/12/09 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS