Python快速学习第三天

第三天:

字典

什么是字典?

字典是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)]

>>>

方法总结:

时间: 2024-08-04 20:11:27

Python快速学习第三天的相关文章

Python快速学习09: 函数的参数

前言 系列文章:[传送门] 继续干起来!! 正文 我们已经接触过函数,函数是可以被引用的(访问或者以其他变量作为其别名),也作为参数传入函数,以及作为列表和字典等等容器对象的元素(function)的参数(arguments)传递. 传递函数 形式参数       位置参数 默认参数 关键字变量参数 位置传递 例子: def f(a,b,c): return a+b+c print(f(1,2,3)) #在调用f时,1,2,3根据位置分别传递给了a,b,c. 形式参数 关键字传递 用位置传递会感

Python快速学习10: 循环的对象及设计 (生活的规律)

前言 系列文章:[传送门] 生活逐渐规律,按时睡觉.今天写博客,明天补时间看会书.慢慢的时间很珍惜 我很喜欢! 时钟就像个循环体,我们将它融入生活. 正文 循环对象的并不是随着Python的诞生就存在的,但它的发展迅速,特别是Python 3x的时代,循环对象正在成为循环的标准形式. 灵活的循环方式 (我晚饭后爱上了萨克斯,因为这是生活的一部分.属于我的特殊循环对象,它的按键就像循环方式,然后出来一首美丽的歌曲) 我的萨克斯偶像 循环对象 循环对象是这样一个对象,它包含有一个next()方法(_

60分钟Python快速学习(转)

60分钟Python快速学习(给发哥一个交代) 阅读目录 第一步:开发环境搭建: 第一个Python功能:初识Python 02.Python中定义变量不需要数据类型 03.在Pythod中定义方法 04.在Python中书写自己的类 60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空格缩进表示等. 今天自己用了60分钟快速学习了下Python的语

3. 蛤蟆Python脚本学习笔记三字符串

3. 蛤蟆Python脚本学习笔记三字符串 本篇名言:"平静的湖面只有呆板的倒映,奔腾的激流才有美丽的浪花!幸福不是靠别人来布施,而是要自己去赢取!生命的意义在不断挑战自己,战胜自己!" 这个本来放在昨天的,由于昨晚又太晚了,所以就搁在这里了.赶紧看看吧. 字符串两边都用双引号或者单引号包起来.否则就使用转移符号来转移一下. 输入在一起可以直接拼接. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48112507

60分钟Python快速学习(给发哥一个交代)

60分钟Python快速学习 之前和同事谈到Python,每次下班后跑步都是在听他说,例如Python属于“胶水语言啦”,属于“解释型语言啦!”,是“面向对象的语言啦!”,另外没有数据类型,逻辑全靠空格缩进表示等. 今天自己用了60分钟快速学习了下Python的语法.和大家分享下,也算是自己这一个小时的学习总结吧! 第一步:开发环境搭建: PyCharm 4.5.4 下载地址:http://www.jetbrains.com/pycharm/download/ 支持多种类型的操作系统,我这次是在

Python爬虫学习:三、爬虫的基本操作流程

本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将数据或信息存入数据库中: 3.数据展示,即在Web端进行显示,并有自己的分析说明. 这次我先介绍第一个功能中所需要实现的基本操作: 爬虫的基本操作:      表示必须步骤           表示可选步骤 导入爬虫所需要的库(如:urllib.urllib2.BeautifulSoup.Scrap

Python快速学习第八天

本文内容全部出自<Python基础教程>第二版 10.1 模块 现在你已经知道如何创建和执行自己的程序(或脚本)了,也学会了怎么用import从外部模块获取函数并且为自己的程序所用: >>> import math >>> math.sin(0) 0.0 让我们来看看怎样编写自己的模块. 10.1.1 模块是程序 任何Python程序都可以作为模块导入.假设你写了一个代码清单10-1所示的程序,并且将它保存为hello.py文件(名字很重要). 代码清单10

Python Tkinter学习(三)

Python初学--窗口视窗Tkinter 1.1 什么是 Tkinter Python自带的可编辑的GUI界面,是一个图像窗口. Tkinter是使用 python 进行窗口视窗设计的模块.简单的构造,多平台,多系统的兼容性, 能让它成为让你快速入门定制窗口文件的好助手.它在 python 窗口视窗模块中是一款简单型的.所以用来入门,熟悉窗口视窗的使用,非常有必要. tkinter 的窗口部件 2.1 Label & Button 标签和按钮 窗口主体框架 每一个tkinter应用的主体框架都

Python快速学习第七天

魔法方法.属性和迭代器 本文内容全部出自<Python基础教程>第二版 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称为魔法(或特殊)方法.如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切地说是根据名字)被Python调用.而几乎没有直接调用它们的必要. 本章会详细讨