前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python快速学习第三天

Python快速学习第三天

作者头像
汤高
发布2018-01-11 15:46:41
9920
发布2018-01-11 15:46:41
举报
文章被收录于专栏:积累沉淀积累沉淀

第三天:

字典

什么是字典?

字典是Python语言中唯一的映射类型。

映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。

字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。

字典类型与序列类型的区别:

1.存取和访问数据的方式不同。 2.序列类型只用数字类型的键(从序列的开始按数值顺序索引); 3.映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直4.接或间接地和存储数据值相关联。 5.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。 6.映射类型用键直接“映射”到值。

字典的创建

字典的基本形态dic={key1:value1, key2:value2...}

      创建方式1:直接型。

>>>dict1={}

>>>dict2={'name':'tanggao','age':20}

创建方式2:使用工厂方法dict,通过其他映射(例如字典)或者(键,值)这样的序列对建立

>>>items=[('name','tanggao'),('age',20)]

>>>dict2=dict(items)

>>>dict1=doct([('name','tanggao'),('age',20)])

    创建方式3:使用内建方法fromkeys()创建’默认‘字典,字典中元素具有相同的value(如果没有给出,默认为none)

>>>dict1={}.fromkeys(('x','y'))

>>> dict1

{'y': None, 'x':None}

>>>dict2={}.fromkeys(('x','y'),-1)

>>> dict2

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

>>>dict3=dict.fromkeys('x','y')

>>> dict3

{'x': 'y'}

>>>dict3=dict.fromkeys(('x','y'))

>>> dict3

{'y': None, 'x':None}

>>> 

字典的基本操作

      Len(d)返回d中 键值对的数量

   d[k]返回关联到键k上的值

   d[k]=v将值v关联到键k上

   deld[k]删除键为k的项

   kin d检查d 中是否含有键为k的项

>>>dict1={'x':1,'y':2}

>>>dict1

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

>>>dict1['z']=3

>>>dict1

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

>>>dict1['z']=4

>>>dict1

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

>>>del dict1['z']

>>>dict1

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

>>>'x' in dict1

True

>>> 

字典的格式化字符串

>>>name= {'Tanggao':20,'ZhousiYuan':19}

>>>"Tanggao 's age is %(tanggao)s." % name

>>>"Tanggao 's age is %(Tanggao)s." % name

"Tanggao's age is 20."

>>> 

字典方法

1、   clear

清楚字典中所有的项,无返回值

>>>d={}

>>>d['name']='Tanggao'

>>>d['age']=20

>>>d

{'age':20, 'name': 'Tanggao'}

>>>returned_value=d.clear()

>>>d

{}

>>>print returned_value

None

  那么这个方法有什么用了,看看两个例子就知道了

#例子一

>>>x={}

>>>y=x

>>>x['key']='value'

>>>y

{'key':'value'}

>>>x={}

>>>y

{'key':'value'}

#例子二

>>>x={}

>>>y=x

>>>x['key']='value'

>>>y

{'key':'value'}

>>>x.clear()

>>>y

{}

>>> 

2、   copy

copy方法返回一个具有相同键值对的新字典(浅复制,因为值本身就是相同的,而不是副本)

相比于直接把某个字典赋给一个引用变量的区别如下:

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

>>>y=x

>>>y

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

>>>x['x']=33

>>>y

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

   但是下面两种情况:

   在副本中替换值的时候,原始字典不受影响

>>>x={'username':'admin','machines':['foo','bar','baz']}

>>>y=x.copy()

>>>y['username']='Tanggao'

>>>y

{'username':'Tanggao', 'machines': ['foo', 'bar', 'baz']}

>>>x

{'username':'admin', 'machines': ['foo', 'bar', 'baz']}

   修改了某个值,而不是替换,浅度复制的字典将受到影响,解决这种问题的方法就是使用深度复制deepcop方法

>>>fromcopy import deepcopy

>>>d={}

>>>d['name']=['tom','tg']

>>>c=d.copy()

>>>dc=deepcopy(d)

>>>d['name'].append('Gao')

#字典的值变了

>>>c

{'name':['tom', 'tg', 'Gao']}

#深度复制不受原始字典的影响了,完完全全是独立的了

>>>dc

{'name':['tom', 'tg']}

3、   fromkeys

fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None

>>>dict1={}.fromkeys(('x','y'))

>>>dict1

{'y':None, 'x': None}

>>>dict2={}.fromkeys(('x','y'),-1)

>>>dict2

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

>>>dict3=dict.fromkeys('x','y')

>>>dict3

{'x':'y'}

4、   get

通过键访问值,平时如果通过一般方法访问键的值,如果键不存在会报错,而get方法不会

>>>d={}

>>>print d['name']

Traceback(most recent call last):

 File "<stdin>", line 1, in<module>

KeyError:'name'

>>>print d.get('name')

None

>>>d['name']='Tanggao'

>>>print d.get('name')

Tanggao

5、   has_key

检查字典中是否含有给出的键,相当于 key in d,但是Python3.0中没有这个方法

>>>d['name']='Tanggao'

>>>print d.get('name')

Tanggao

>>>d.has_key('name')

True

>>>d.has_key('age')

False

6、   items和iteritems

items方法将所有的字典项以列表方式返回,无序返回

>>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>>d.items()

[('url','http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]

   iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表,这个迭代器可以通过next0方法访问每个项,直到到达最后一个项,访问完最后一项,再接着遍历访问就会报错

>>>it=d.iteritems()

>>>it

<dictionary-itemiteratorobject at 0xbd70a8>

>>>it.next()

('url','http://www.python.org')

>>>it.next()

('spam',0)

>>>it.next()

('title','Python Web Site')

>>>it.next()

Traceback(most recent call last):

  File "<stdin>", line 1, in<module>

StopIteration

7、   key和iterkeys

key方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器

>>>ll=d.keys()

>>>ll

['url','spam', 'title']

>>>it1=d.iterkeys()

>>>it1.next()

'url'

>>>it1.next()

'spam'

>>>it1.next()

'title'

>>>it1.next()

Traceback(most recent call last):

  File "<stdin>", line 1, in<module>

StopIteration

8、   pop

pop方法将字典中的某项删除,以列表形式返回删除的项

>>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>>d.pop('spam')

0

9、   popitem

随机弹出字典中的项

>>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>>d.pop('spam')

0

>>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>>d.popitem()

('url','http://www.python.org')

>>>d.popitem()

('spam',0)

>>>d.popitem()

('title','Python Web Site')

>>>d.popitem()

Traceback(most recent call last):

  File "<stdin>", line 1, in<module>

KeyError:'popitem(): dictionary is empty'

10、  setdefault

setdefalut方法能够获得与给定键相关联的值,除此之外,还能在字典中不含有给定键的情况下设定相应的键值。注意:如果键不存在的时候,setdefault返回默认值并且相应地更新字典,如果键存在,那么就返回与其对应的值,但是不改变字典。默认值可选,如果不设定,为None

>>>d={}

>>>d.setdefault('name','Tg')

'Tg'

>>>d

{'name':'Tg'}

>>>d['name']='Tom'

>>>d

{'name':'Tom'}

>>>d.setdefault('name','Tg')

'Tom'

>>>d

{'name':'Tom'}

>>>d1={}

>>>print d1.setdefault('name')

None

>>>d1

{'name':None}

11、  update

update方法可以利用一个字典更新另外一个字典,提供的字典的项会被添加到旧的字典中,若键相同,则覆盖

>>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>>x={'title':'Tanggao is good ','age':20}

>>>d.update(x)

>>>d

{'url':'http://www.python.org', 'age': 20, 'spam': 0, 'title': 'Tanggao is good '}

>>> 

12、  values和itervalues

values方法以列表的形式返回字典中的值,itervalues返回值的迭代器

>>>d={}

>>>d[1]=1

>>>d[2]=2

>>>d[3]=3

>>>d[4]=1

>>>d.values()

[1,2, 3, 1]

>>>it=d.itervalues()

>>>it.next()

1

>>>it.next()

2

>>>it.next()

3

>>>it.next()

1

>>>it.next()

Traceback(most recent call last):

  File "<stdin>", line 1, in<module>

StopIteration

13、sorted

sorted(dic.iteritems(), key=lambda d:d[1], reverse=False)

说明:对字典dic中的元素按照d[1](d[1]是value,d[0]是key,和d没关系,可以改为a什么的)进行升序排序,通过设置reverse的True或False可以进行逆序,并返回排序后的字典(该排序后的字典由元组组成,其形式为[(key1,value1),(key2,value2),...],且原字典保持不变)

>>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

>>>sorted(d)

['spam','title', 'url']

>>>sorted(d.iteritems(),key=lambda d:d[1])

[('spam',0), ('title', 'Python Web Site'), ('url', 'http://www.python.org')]

>>>sorted(d.iteritems(),key=lambda d:d[0])

[('spam',0), ('title', 'Python Web Site'), ('url', 'http://www.python.org')]

>>>sorted(d.iteritems(),key=lambda d:d[0],reverse=True)

[('url','http://www.python.org'), ('title', 'Python Web Site'), ('spam', 0)]

>>> 

方法总结:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档